drm: only trust core drm ioctls - driver ioctls are a mess.
authorDave Airlie <airlied@redhat.com>
Fri, 20 Jun 2008 05:42:38 +0000 (15:42 +1000)
committerDave Airlie <airlied@redhat.com>
Fri, 20 Jun 2008 05:42:38 +0000 (15:42 +1000)
So driver ioctls need a full auditing before we can make this change.

Signed-off-by: Dave Airlie <airlied@redhat.com>
drivers/char/drm/drm_drv.c

index 22957ac..5641387 100644 (file)
@@ -470,19 +470,18 @@ int drm_ioctl(struct inode *inode, struct file *filp,
        if ((nr >= DRM_COMMAND_BASE) && (nr < DRM_COMMAND_END) &&
            (nr < DRM_COMMAND_BASE + dev->driver->num_ioctls))
                ioctl = &dev->driver->ioctls[nr - DRM_COMMAND_BASE];
-       else if ((nr >= DRM_COMMAND_END) || (nr < DRM_COMMAND_BASE))
+       else if ((nr >= DRM_COMMAND_END) || (nr < DRM_COMMAND_BASE)) {
                ioctl = &drm_ioctls[nr];
-       else
+               cmd = ioctl->cmd;
+       } else
                goto err_i1;
 
        /* Do not trust userspace, use our own definition */
-       cmd = ioctl->cmd;
        func = ioctl->func;
        /* is there a local override? */
        if ((nr == DRM_IOCTL_NR(DRM_IOCTL_DMA)) && dev->driver->dma_ioctl)
                func = dev->driver->dma_ioctl;
 
-
        if (!func) {
                DRM_DEBUG("no function\n");
                retcode = -EINVAL;