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 <h...@lst.de>
| Date:   Thu Apr 7 22:43:59 2016 +0200
|
|     x86/syscalls: Wire up compat readv2/writev2 syscalls
|    
|     Reported-by: David Smith <dsm...@redhat.com>
|     Tested-by: David Smith <dsm...@redhat.com>
|     Signed-off-by: Christoph Hellwig <h...@lst.de>
|     Cc: Andy Lutomirski <l...@amacapital.net>
|     Cc: Borislav Petkov <b...@alien8.de>
|     Cc: Brian Gerst <brge...@gmail.com>
|     Cc: Denys Vlasenko <dvlas...@redhat.com>
|     Cc: H. Peter Anvin <h...@zytor.com>
|     Cc: Linus Torvalds <torva...@linux-foundation.org>
|     Cc: Peter Zijlstra <pet...@infradead.org>
|     Cc: Thomas Gleixner <t...@linutronix.de>
|     Link: http://lkml.kernel.org/r/20160407204359.ga3...@lst.de
|     Signed-off-by: Ingo Molnar <mi...@kernel.org>

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 <hjl.to...@gmail.com>
| 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 <hjl.to...@gmail.com>
|
|     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 <hjl.to...@gmail.com>
|     Cc: Andy Lutomirski <l...@kernel.org>
|     Cc: Borislav Petkov <b...@alien8.de>
|     Cc: Brian Gerst <brge...@gmail.com>
|     Cc: Christoph Hellwig <h...@lst.de>
|     Cc: Denys Vlasenko <dvlas...@redhat.com>
|     Cc: H. Peter Anvin <h...@zytor.com>
|     Cc: Josh Poimboeuf <jpoim...@redhat.com>
|     Cc: Linus Torvalds <torva...@linux-foundation.org>
|     Cc: Peter Zijlstra <pet...@infradead.org>
|     Cc: Thomas Gleixner <t...@linutronix.de>
|     Link: 
http://lkml.kernel.org/r/came9roovcmf-rqfx_n1u_tu_dx1bykjtfr%3dq4-_pfvsj9bc...@mail.gmail.com
|     Signed-off-by: Ingo Molnar <mi...@kernel.org>

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)

Reply via email to