Source: linux Version: 4.7.6-1 Severity: normal The x32 preadv/pwritev syscalls have been broken in kernel 4.7-rc1 by this commit:
| commit 482dd2ef124484601adea82e5e806e81e2bc5521 | Author: Christoph Hellwig <[email protected]> | Date: Thu Apr 7 22:43:59 2016 +0200 | | x86/syscalls: Wire up compat readv2/writev2 syscalls | | Reported-by: David Smith <[email protected]> | Tested-by: David Smith <[email protected]> | Signed-off-by: Christoph Hellwig <[email protected]> | Cc: Andy Lutomirski <[email protected]> | Cc: Borislav Petkov <[email protected]> | Cc: Brian Gerst <[email protected]> | Cc: Denys Vlasenko <[email protected]> | Cc: H. Peter Anvin <[email protected]> | Cc: Linus Torvalds <[email protected]> | Cc: Peter Zijlstra <[email protected]> | Cc: Thomas Gleixner <[email protected]> | Link: http://lkml.kernel.org/r/[email protected] | Signed-off-by: Ingo Molnar <[email protected]> It causes the glibc testsuite to fail on x32 when running a 4.7 kernel, and more precisely the misc/tst-preadvwritev and misc/tst-preadvwritev64 tests. The syscalls have been fixed in kernel 4.8-rc1 by this commit, even if neither the commit nor the mail it refers too talk about a breakage: | commit 3ebfd81f7fb3e81a754e37283b7f38c62244641a | Author: H.J. Lu <[email protected]> | Date: Thu Jul 14 12:31:53 2016 -0700 | | x86/syscalls: Add compat_sys_preadv64v2/compat_sys_pwritev64v2 | | Don't use the same syscall numbers for 2 different syscalls: | | 534 x32 preadv compat_sys_preadv64 | 535 x32 pwritev compat_sys_pwritev64 | 534 x32 preadv2 compat_sys_preadv2 | 535 x32 pwritev2 compat_sys_pwritev2 | | Add compat_sys_preadv64v2() and compat_sys_pwritev64v2() so that 64-bit offset | is passed in one 64-bit register on x32, similar to compat_sys_preadv64() | and compat_sys_pwritev64(). | | Signed-off-by: H.J. Lu <[email protected]> | | x86/syscalls: Add compat_sys_preadv64v2/compat_sys_pwritev64v2 | | Don't use the same syscall numbers for 2 different syscalls: | | 534 x32 preadv compat_sys_preadv64 | 535 x32 pwritev compat_sys_pwritev64 | 534 x32 preadv2 compat_sys_preadv2 | 535 x32 pwritev2 compat_sys_pwritev2 | | Add compat_sys_preadv64v2() and compat_sys_pwritev64v2() so that 64-bit offset | is passed in one 64-bit register on x32, similar to compat_sys_preadv64() | and compat_sys_pwritev64(). | | Signed-off-by: H.J. Lu <[email protected]> | Cc: Andy Lutomirski <[email protected]> | Cc: Borislav Petkov <[email protected]> | Cc: Brian Gerst <[email protected]> | Cc: Christoph Hellwig <[email protected]> | Cc: Denys Vlasenko <[email protected]> | Cc: H. Peter Anvin <[email protected]> | Cc: Josh Poimboeuf <[email protected]> | Cc: Linus Torvalds <[email protected]> | Cc: Peter Zijlstra <[email protected]> | Cc: Thomas Gleixner <[email protected]> | Link: http://lkml.kernel.org/r/came9roovcmf-rqfx_n1u_tu_dx1bykjtfr%[email protected] | Signed-off-by: Ingo Molnar <[email protected]> Unfortunately this commit is not easily backportable as it completely breaks the ABI. Nevertheless it should not be a big deal as we'll go to kernel 4.8 soon. Given it is already available in experimental, I am just going to close this bug in a few minutes. I just wanted to make sure the issue is documented somewhere so that someone else do not spend hours before finding the issue. -- System Information: Debian Release: stretch/sid APT prefers testing APT policy: (990, 'testing'), (500, 'unstable'), (1, 'experimental') Architecture: amd64 (x86_64) Foreign Architectures: i386 Kernel: Linux 4.7.0-1-amd64 (SMP w/4 CPU cores) Locale: LANG=fr_FR.UTF-8, LC_CTYPE=fr_FR.UTF-8 (charmap=UTF-8) Shell: /bin/sh linked to /bin/dash Init: systemd (via /run/systemd/system)

