1. 25 Oct, 2019 1 commit
  2. 21 Oct, 2019 1 commit
    • Guillem Jover's avatar
      aio: Fix io_pgetevents() struct __compat_aio_sigset layout · 97eba80f
      Guillem Jover authored
      This type is used to pass the sigset_t from userland to the kernel,
      but it was using the kernel native pointer type for the member
      representing the compat userland pointer to the userland sigset_t.
      
      This messes up the layout, and makes the kernel eat up both the
      userland pointer and the size members into the kernel pointer, and
      then reads garbage into the kernel sigsetsize. Which makes the sigset_t
      size consistency check fail, and consequently the syscall always
      returns -EINVAL.
      
      This breaks both libaio and strace on 32-bit userland running on 64-bit
      kernels. And there are apparently no users in the wild of the current
      broken layout (at least according to codesearch.debian.org and a brief
      check over github.com search). So it looks safe to fix this directly
      in the kernel, instead of either letting userland deal with this
      permanently with the additional overhead or trying to make the syscall
      infer what layout userland used, even though this is also being worked
      around in libaio to temporarily cope with kernels that have not yet
      been fixed.
      
      We use a proper compat_uptr_t instead of a compat_sigset_t pointer.
      
      Fixes: 7a074e96 ("aio: implement io_pgetevents")
      Signed-off-by: default avatarGuillem Jover <guillem@hadrons.org>
      Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
      97eba80f
  3. 17 Oct, 2019 1 commit
  4. 13 Oct, 2019 16 commits
  5. 12 Oct, 2019 21 commits