drm/i915: Catch dirt in unused execbuffer fields
authorDaniel Vetter <daniel.vetter@ffwll.ch>
Thu, 24 Apr 2014 06:09:11 +0000 (08:09 +0200)
committerDaniel Vetter <daniel.vetter@ffwll.ch>
Mon, 5 May 2014 07:08:43 +0000 (09:08 +0200)
We need to make sure that userspace keeps on following the contract,
otherwise we won't be able to use the reserved fields at all.

v2: Add DRM_DEBUG (Chris)

Testcase: igt/gem_exec_params/*-dirt
Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
drivers/gpu/drm/i915/i915_gem_execbuffer.c

index c7ef65c3ae91c8a656d812ce7b4a543606409147..b9dcc2869edc89a512ee39fe8afe0977266e2001 100644 (file)
@@ -1123,6 +1123,11 @@ i915_gem_do_execbuffer(struct drm_device *dev, void *data,
                        ret = -EFAULT;
                        goto pre_mutex_err;
                }
+       } else {
+               if (args->DR1 || args->DR4 || args->cliprects_ptr) {
+                       DRM_DEBUG("0 cliprects but dirt in cliprects fields\n");
+                       return -EINVAL;
+               }
        }
 
        intel_runtime_pm_get(dev_priv);
@@ -1400,6 +1405,11 @@ i915_gem_execbuffer2(struct drm_device *dev, void *data,
                return -EINVAL;
        }
 
+       if (args->rsvd2 != 0) {
+               DRM_DEBUG("dirty rvsd2 field\n");
+               return -EINVAL;
+       }
+
        exec2_list = kmalloc(sizeof(*exec2_list)*args->buffer_count,
                             GFP_TEMPORARY | __GFP_NOWARN | __GFP_NORETRY);
        if (exec2_list == NULL)