Ensure we don't pass any relocation data in execbuf for any
new hardware.

Patch likely is not optimal but is doing hard cut before
entering execbuf.

v2: fixing version (< 12 instead of incidentally tested < 9)

Signed-off-by: Zbigniew Kempczyński <zbigniew.kempczyn...@intel.com>
Cc: Jason Ekstrand <ja...@jlekstrand.net>
Cc: Daniel Vetter <daniel.vet...@ffwll.ch>
---
 .../gpu/drm/i915/gem/i915_gem_execbuffer.c    | 22 +++++++++++++++++++
 1 file changed, 22 insertions(+)

diff --git a/drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c 
b/drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c
index fe170186dd42..7d42ec5b8eb5 100644
--- a/drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c
+++ b/drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c
@@ -3394,6 +3394,22 @@ static bool check_buffer_count(size_t count)
        return !(count < 1 || count > INT_MAX || count > SIZE_MAX / sz - 1);
 }
 
+static bool check_objects_correctness(const struct drm_i915_private *i915,
+                                     const struct drm_i915_gem_exec_object2 
*objs,
+                                     uint32_t buffer_count)
+{
+       uint32_t i;
+
+       if (INTEL_GEN(i915) < 12 || IS_TIGERLAKE(i915))
+               return true;
+
+       for (i = 0; i < buffer_count; i++)
+               if (objs[i].relocation_count)
+                       return false;
+
+       return true;
+}
+
 /*
  * Legacy execbuffer just creates an exec2 list from the original exec object
  * list array and passes it to the real function.
@@ -3529,6 +3545,12 @@ i915_gem_execbuffer2_ioctl(struct drm_device *dev, void 
*data,
                return -EFAULT;
        }
 
+       if (!check_objects_correctness(i915, exec2_list, count)) {
+               drm_dbg(&i915->drm, "Relocations are not supported\n");
+               kvfree(exec2_list);
+               return -EINVAL;
+       }
+
        err = i915_gem_do_execbuffer(dev, file, args, exec2_list);
 
        /*
-- 
2.26.0

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to