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.kempczynski@xxxxxxxxx> Cc: Jason Ekstrand <jason@xxxxxxxxxxxxxx> Cc: Daniel Vetter <daniel.vetter@xxxxxxxx> --- .../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@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx