drm: stop information leak of old kernel stack.
authorDave Airlie <airlied@redhat.com>
Tue, 17 Aug 2010 04:46:00 +0000 (14:46 +1000)
committerDave Airlie <airlied@redhat.com>
Tue, 17 Aug 2010 04:51:45 +0000 (14:51 +1000)
non-critical issue, CVE-2010-2803

Userspace controls the amount of memory to be allocate, so it can
get the ioctl to allocate more memory than the kernel uses, and get
access to kernel stack. This can only be done for processes authenticated
to the X server for DRI access, and if the user has DRI access.

Fix is to just memset the data to 0 if the user doesn't copy into
it in the first place.

Reported-by: Kees Cook <kees@ubuntu.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
drivers/gpu/drm/drm_drv.c

index 90288ec7c28420133d0deea13e3ba2f1f98d413c..3644c94c0a172402224d122316f23175a057e7f9 100644 (file)
@@ -477,7 +477,9 @@ long drm_ioctl(struct file *filp,
                                retcode = -EFAULT;
                                goto err_i1;
                        }
-               }
+               } else
+                       memset(kdata, 0, _IOC_SIZE(cmd));
+
                if (ioctl->flags & DRM_UNLOCKED)
                        retcode = func(dev, kdata, file_priv);
                else {