← Back to team overview

kernel-packages team mailing list archive

[Bug 1274349] Re: Fix-compat_sys_recvmsg-on-x32-archs

 

** Also affects: linux (Ubuntu Lucid)
   Importance: Undecided
       Status: New

** Also affects: linux-ec2 (Ubuntu Lucid)
   Importance: Undecided
       Status: New

** Also affects: linux-armadaxp (Ubuntu Lucid)
   Importance: Undecided
       Status: New

** Also affects: linux-lts-raring (Ubuntu Lucid)
   Importance: Undecided
       Status: New

** Also affects: linux-lts-saucy (Ubuntu Lucid)
   Importance: Undecided
       Status: New

** Also affects: linux (Ubuntu Quantal)
   Importance: Undecided
       Status: New

** Also affects: linux-ec2 (Ubuntu Quantal)
   Importance: Undecided
       Status: New

** Also affects: linux-armadaxp (Ubuntu Quantal)
   Importance: Undecided
       Status: New

** Also affects: linux-lts-raring (Ubuntu Quantal)
   Importance: Undecided
       Status: New

** Also affects: linux-lts-saucy (Ubuntu Quantal)
   Importance: Undecided
       Status: New

** Changed in: linux-armadaxp (Ubuntu Precise)
       Status: New => Invalid

** Changed in: linux-armadaxp (Ubuntu Precise)
   Importance: Undecided => Critical

** Changed in: linux-armadaxp (Ubuntu Saucy)
       Status: New => Invalid

** Changed in: linux-armadaxp (Ubuntu Saucy)
   Importance: Undecided => Critical

** Changed in: linux-armadaxp (Ubuntu Lucid)
       Status: New => Invalid

** Changed in: linux-armadaxp (Ubuntu Lucid)
   Importance: Undecided => Critical

** Changed in: linux-armadaxp (Ubuntu Trusty)
       Status: New => Invalid

** Changed in: linux-armadaxp (Ubuntu Trusty)
   Importance: Undecided => Critical

** Changed in: linux-armadaxp (Ubuntu Quantal)
       Status: New => Invalid

** Changed in: linux-armadaxp (Ubuntu Quantal)
   Importance: Undecided => Critical

** Changed in: linux-ec2 (Ubuntu Precise)
       Status: New => Invalid

** Changed in: linux-ec2 (Ubuntu Precise)
   Importance: Undecided => Critical

** Changed in: linux-ec2 (Ubuntu Saucy)
       Status: New => Invalid

** Changed in: linux-ec2 (Ubuntu Saucy)
   Importance: Undecided => Critical

** Changed in: linux-ec2 (Ubuntu Lucid)
       Status: New => Invalid

** Changed in: linux-ec2 (Ubuntu Lucid)
   Importance: Undecided => Critical

** Changed in: linux-ec2 (Ubuntu Trusty)
       Status: New => Invalid

** Changed in: linux-ec2 (Ubuntu Trusty)
   Importance: Undecided => Critical

** Changed in: linux-ec2 (Ubuntu Quantal)
       Status: New => Invalid

** Changed in: linux-ec2 (Ubuntu Quantal)
   Importance: Undecided => Critical

** Changed in: linux-lts-quantal (Ubuntu Precise)
       Status: New => Invalid

** Changed in: linux-lts-quantal (Ubuntu Precise)
   Importance: Undecided => Critical

** Changed in: linux-lts-quantal (Ubuntu Saucy)
       Status: New => Invalid

** Changed in: linux-lts-quantal (Ubuntu Saucy)
   Importance: Undecided => Critical

** Changed in: linux-lts-quantal (Ubuntu Lucid)
       Status: New => Invalid

** Changed in: linux-lts-quantal (Ubuntu Lucid)
   Importance: Undecided => Critical

** Changed in: linux-lts-quantal (Ubuntu Trusty)
       Status: New => Invalid

** Changed in: linux-lts-quantal (Ubuntu Trusty)
   Importance: Undecided => Critical

** Changed in: linux-lts-quantal (Ubuntu Quantal)
       Status: New => Invalid

** Changed in: linux-lts-quantal (Ubuntu Quantal)
   Importance: Undecided => Critical

** Changed in: linux-mvl-dove (Ubuntu Precise)
       Status: New => Invalid

** Changed in: linux-mvl-dove (Ubuntu Precise)
   Importance: Undecided => Critical

** Changed in: linux-mvl-dove (Ubuntu Saucy)
       Status: New => Invalid

** Changed in: linux-mvl-dove (Ubuntu Saucy)
   Importance: Undecided => Critical

** Changed in: linux-mvl-dove (Ubuntu Lucid)
       Status: New => Invalid

** Changed in: linux-mvl-dove (Ubuntu Lucid)
   Importance: Undecided => Critical

** Changed in: linux-mvl-dove (Ubuntu Trusty)
       Status: New => Invalid

** Changed in: linux-mvl-dove (Ubuntu Trusty)
   Importance: Undecided => Critical

** Changed in: linux-mvl-dove (Ubuntu Quantal)
       Status: New => Invalid

** Changed in: linux-mvl-dove (Ubuntu Quantal)
   Importance: Undecided => Critical

** Changed in: linux-lts-saucy (Ubuntu Precise)
   Importance: Undecided => Critical

** Changed in: linux-lts-saucy (Ubuntu Saucy)
   Importance: Undecided => Critical

** Changed in: linux-lts-saucy (Ubuntu Lucid)
       Status: New => Invalid

** Changed in: linux-lts-saucy (Ubuntu Lucid)
   Importance: Undecided => Critical

** Changed in: linux-lts-saucy (Ubuntu Trusty)
   Importance: Undecided => Critical

** Changed in: linux-lts-saucy (Ubuntu Quantal)
       Status: New => Invalid

** Changed in: linux-lts-saucy (Ubuntu Quantal)
   Importance: Undecided => Critical

** Changed in: linux (Ubuntu Precise)
   Importance: Undecided => Critical

** Changed in: linux (Ubuntu Saucy)
   Importance: Undecided => Critical

** Changed in: linux (Ubuntu Lucid)
       Status: New => Invalid

** Changed in: linux (Ubuntu Lucid)
   Importance: Undecided => Critical

** Changed in: linux (Ubuntu Trusty)
   Importance: Undecided => Critical

** Changed in: linux (Ubuntu Quantal)
       Status: New => Invalid

** Changed in: linux (Ubuntu Quantal)
   Importance: Undecided => Critical

** Changed in: linux-ti-omap4 (Ubuntu Precise)
       Status: New => Invalid

** Changed in: linux-ti-omap4 (Ubuntu Precise)
   Importance: Undecided => Critical

** Changed in: linux-ti-omap4 (Ubuntu Saucy)
       Status: New => Invalid

** Changed in: linux-ti-omap4 (Ubuntu Saucy)
   Importance: Undecided => Critical

** Changed in: linux-ti-omap4 (Ubuntu Lucid)
       Status: New => Invalid

** Changed in: linux-ti-omap4 (Ubuntu Lucid)
   Importance: Undecided => Critical

** Changed in: linux-ti-omap4 (Ubuntu Trusty)
       Status: New => Invalid

** Changed in: linux-ti-omap4 (Ubuntu Trusty)
   Importance: Undecided => Critical

** Changed in: linux-ti-omap4 (Ubuntu Quantal)
       Status: New => Invalid

** Changed in: linux-ti-omap4 (Ubuntu Quantal)
   Importance: Undecided => Critical

** Changed in: linux-fsl-imx51 (Ubuntu Precise)
       Status: New => Invalid

** Changed in: linux-fsl-imx51 (Ubuntu Precise)
   Importance: Undecided => Critical

** Changed in: linux-fsl-imx51 (Ubuntu Saucy)
       Status: New => Invalid

** Changed in: linux-fsl-imx51 (Ubuntu Saucy)
   Importance: Undecided => Critical

** Changed in: linux-fsl-imx51 (Ubuntu Lucid)
       Status: New => Invalid

** Changed in: linux-fsl-imx51 (Ubuntu Lucid)
   Importance: Undecided => Critical

** Changed in: linux-fsl-imx51 (Ubuntu Trusty)
       Status: New => Invalid

** Changed in: linux-fsl-imx51 (Ubuntu Trusty)
   Importance: Undecided => Critical

** Changed in: linux-fsl-imx51 (Ubuntu Quantal)
       Status: New => Invalid

** Changed in: linux-fsl-imx51 (Ubuntu Quantal)
   Importance: Undecided => Critical

** Changed in: linux-lts-raring (Ubuntu Precise)
   Importance: Undecided => Critical

** Changed in: linux-lts-raring (Ubuntu Saucy)
   Importance: Undecided => Critical

** Changed in: linux-lts-raring (Ubuntu Lucid)
       Status: New => Invalid

** Changed in: linux-lts-raring (Ubuntu Lucid)
   Importance: Undecided => Critical

** Changed in: linux-lts-raring (Ubuntu Trusty)
   Importance: Undecided => Critical

** Changed in: linux-lts-raring (Ubuntu Quantal)
       Status: New => Invalid

** Changed in: linux-lts-raring (Ubuntu Quantal)
   Importance: Undecided => Critical

** Description changed:

- Reported by pageexec
- 
- asmlinkage long compat_sys_recvmmsg(int fd, struct compat_mmsghdr __user *mmsg,
-                                     unsigned int vlen, unsigned int flags,
-                                     struct compat_timespec __user *timeout)
- {
-         int datagrams;
-         struct timespec ktspec;
- 
-         if (flags & MSG_CMSG_COMPAT)
-                 return -EINVAL;
- 
-         if (COMPAT_USE_64BIT_TIME)
-                 return __sys_recvmmsg(fd, (struct mmsghdr __user *)mmsg, vlen,
-                                       flags | MSG_CMSG_COMPAT,
-                                       (struct timespec *) timeout);
- /*...*/
- 
- The timeout pointer parameter is provided by userland (hence the
- __user annotation) but for x32 syscalls it's simply cast to a kernel
- pointer and is passed to __sys_recvmmsg which will eventually directly
+ The timeout pointer parameter is provided by userland (hence the __user
+ annotation) but for x32 syscalls it's simply cast to a kernel pointer
+ and is passed to __sys_recvmmsg which will eventually directly
  dereference it for both reading and writing. Other callers to
- __sys_recvmmsg properly copy from userland to the kernel first.
- 
- The impact is a sort of arbitrary kernel write-where-what primitive by
+ __sys_recvmmsg properly copy from userland to the kernel first. The
+ impact is a sort of arbitrary kernel write-where-what primitive by
  unprivileged users where the to-be-written area must contain valid
  timespec data initially (the first 64 bit long field must be positive
  and the second one must be < 1G).
  
- The bug was introduced by commit
- http://git.kernel.org/linus/ee4fa23c4b (other uses of
- COMPAT_USE_64BIT_TIME seem fine) and should affect all kernels since
- 3.4 (and perhaps vendor kernels if they backported x32 support along
- with this code). Note that CONFIG_X86_X32_ABI gets enabled at build
- time and only if CONFIG_X86_X32 is enabled and ld can build x32
- executables.
+ Break-Fix: ee4fa23c4bfcc635d077a9633d405610de45bc70
+ 2def2ef2ae5f3990aabdbe8a755911902707d268

-- 
You received this bug notification because you are a member of Kernel
Packages, which is subscribed to linux-armadaxp in Ubuntu.
https://bugs.launchpad.net/bugs/1274349

Title:
  Fix-compat_sys_recvmsg-on-x32-archs

Status in “linux” package in Ubuntu:
  Confirmed
Status in “linux-armadaxp” package in Ubuntu:
  Invalid
Status in “linux-ec2” package in Ubuntu:
  Invalid
Status in “linux-fsl-imx51” package in Ubuntu:
  Invalid
Status in “linux-lts-quantal” package in Ubuntu:
  Invalid
Status in “linux-lts-raring” package in Ubuntu:
  Invalid
Status in “linux-lts-saucy” package in Ubuntu:
  Invalid
Status in “linux-mvl-dove” package in Ubuntu:
  Invalid
Status in “linux-ti-omap4” package in Ubuntu:
  Invalid
Status in “linux” source package in Lucid:
  Invalid
Status in “linux-armadaxp” source package in Lucid:
  Invalid
Status in “linux-ec2” source package in Lucid:
  Invalid
Status in “linux-fsl-imx51” source package in Lucid:
  Invalid
Status in “linux-lts-quantal” source package in Lucid:
  Invalid
Status in “linux-lts-raring” source package in Lucid:
  Invalid
Status in “linux-lts-saucy” source package in Lucid:
  Invalid
Status in “linux-mvl-dove” source package in Lucid:
  Invalid
Status in “linux-ti-omap4” source package in Lucid:
  Invalid
Status in “linux” source package in Precise:
  Invalid
Status in “linux-armadaxp” source package in Precise:
  Invalid
Status in “linux-ec2” source package in Precise:
  Invalid
Status in “linux-fsl-imx51” source package in Precise:
  Invalid
Status in “linux-lts-quantal” source package in Precise:
  Invalid
Status in “linux-lts-raring” source package in Precise:
  Fix Released
Status in “linux-lts-saucy” source package in Precise:
  Fix Released
Status in “linux-mvl-dove” source package in Precise:
  Invalid
Status in “linux-ti-omap4” source package in Precise:
  Invalid
Status in “linux” source package in Quantal:
  Invalid
Status in “linux-armadaxp” source package in Quantal:
  Invalid
Status in “linux-ec2” source package in Quantal:
  Invalid
Status in “linux-fsl-imx51” source package in Quantal:
  Invalid
Status in “linux-lts-quantal” source package in Quantal:
  Invalid
Status in “linux-lts-raring” source package in Quantal:
  Invalid
Status in “linux-lts-saucy” source package in Quantal:
  Invalid
Status in “linux-mvl-dove” source package in Quantal:
  Invalid
Status in “linux-ti-omap4” source package in Quantal:
  Invalid
Status in “linux” source package in Saucy:
  Fix Released
Status in “linux-armadaxp” source package in Saucy:
  Invalid
Status in “linux-ec2” source package in Saucy:
  Invalid
Status in “linux-fsl-imx51” source package in Saucy:
  Invalid
Status in “linux-lts-quantal” source package in Saucy:
  Invalid
Status in “linux-lts-raring” source package in Saucy:
  Invalid
Status in “linux-lts-saucy” source package in Saucy:
  Invalid
Status in “linux-mvl-dove” source package in Saucy:
  Invalid
Status in “linux-ti-omap4” source package in Saucy:
  Invalid
Status in “linux” source package in Trusty:
  Confirmed
Status in “linux-armadaxp” source package in Trusty:
  Invalid
Status in “linux-ec2” source package in Trusty:
  Invalid
Status in “linux-fsl-imx51” source package in Trusty:
  Invalid
Status in “linux-lts-quantal” source package in Trusty:
  Invalid
Status in “linux-lts-raring” source package in Trusty:
  Invalid
Status in “linux-lts-saucy” source package in Trusty:
  Invalid
Status in “linux-mvl-dove” source package in Trusty:
  Invalid
Status in “linux-ti-omap4” source package in Trusty:
  Invalid

Bug description:
  The timeout pointer parameter is provided by userland (hence the
  __user annotation) but for x32 syscalls it's simply cast to a kernel
  pointer and is passed to __sys_recvmmsg which will eventually directly
  dereference it for both reading and writing. Other callers to
  __sys_recvmmsg properly copy from userland to the kernel first. The
  impact is a sort of arbitrary kernel write-where-what primitive by
  unprivileged users where the to-be-written area must contain valid
  timespec data initially (the first 64 bit long field must be positive
  and the second one must be < 1G).

  Break-Fix: ee4fa23c4bfcc635d077a9633d405610de45bc70
  2def2ef2ae5f3990aabdbe8a755911902707d268

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1274349/+subscriptions