]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
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>
Thu, 24 Apr 2014 10:12:25 +0000 (12:12 +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 5c6dade6cf529e68f1f0b86a4845db891122705b..96d0aae6f975aec234493869ee4f1f637c9a3e8c 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)