diff options
Diffstat (limited to 'drivers/gpu/drm/drm_drv.c')
-rw-r--r-- | drivers/gpu/drm/drm_drv.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/drivers/gpu/drm/drm_drv.c b/drivers/gpu/drm/drm_drv.c index b55f138bd990..05e197d32c45 100644 --- a/drivers/gpu/drm/drm_drv.c +++ b/drivers/gpu/drm/drm_drv.c | |||
@@ -61,7 +61,7 @@ static int drm_version(struct drm_device *dev, void *data, | |||
61 | 61 | ||
62 | /** Ioctl table */ | 62 | /** Ioctl table */ |
63 | static const struct drm_ioctl_desc drm_ioctls[] = { | 63 | static const struct drm_ioctl_desc drm_ioctls[] = { |
64 | DRM_IOCTL_DEF(DRM_IOCTL_VERSION, drm_version, DRM_UNLOCKED), | 64 | DRM_IOCTL_DEF(DRM_IOCTL_VERSION, drm_version, DRM_UNLOCKED|DRM_RENDER_ALLOW), |
65 | DRM_IOCTL_DEF(DRM_IOCTL_GET_UNIQUE, drm_getunique, 0), | 65 | DRM_IOCTL_DEF(DRM_IOCTL_GET_UNIQUE, drm_getunique, 0), |
66 | DRM_IOCTL_DEF(DRM_IOCTL_GET_MAGIC, drm_getmagic, 0), | 66 | DRM_IOCTL_DEF(DRM_IOCTL_GET_MAGIC, drm_getmagic, 0), |
67 | DRM_IOCTL_DEF(DRM_IOCTL_IRQ_BUSID, drm_irq_by_busid, DRM_MASTER|DRM_ROOT_ONLY), | 67 | DRM_IOCTL_DEF(DRM_IOCTL_IRQ_BUSID, drm_irq_by_busid, DRM_MASTER|DRM_ROOT_ONLY), |
@@ -332,9 +332,16 @@ long drm_ioctl(struct file *filp, | |||
332 | cmd = ioctl->cmd_drv; | 332 | cmd = ioctl->cmd_drv; |
333 | } | 333 | } |
334 | else if ((nr >= DRM_COMMAND_END) || (nr < DRM_COMMAND_BASE)) { | 334 | else if ((nr >= DRM_COMMAND_END) || (nr < DRM_COMMAND_BASE)) { |
335 | u32 drv_size; | ||
336 | |||
335 | ioctl = &drm_ioctls[nr]; | 337 | ioctl = &drm_ioctls[nr]; |
336 | cmd = ioctl->cmd; | 338 | |
339 | drv_size = _IOC_SIZE(ioctl->cmd); | ||
337 | usize = asize = _IOC_SIZE(cmd); | 340 | usize = asize = _IOC_SIZE(cmd); |
341 | if (drv_size > asize) | ||
342 | asize = drv_size; | ||
343 | |||
344 | cmd = ioctl->cmd; | ||
338 | } else | 345 | } else |
339 | goto err_i1; | 346 | goto err_i1; |
340 | 347 | ||