[Intel-gfx] [PATCH 31/46] drm/i915: Move secure execbuf check to execbuf2

Matthew Brost
2021-08-03T22:12:38Z

Goal is to remove all input sanity checks from the core submission.

Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Signed-off-by: Matthew Brost <matthew.brost@intel.com>
---
.../gpu/drm/i915/gem/i915_gem_execbuffer.c | 35 +++++++++++--------
1 file changed, 21 insertions(+), 14 deletions(-)

diff --git a/drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c b/drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c
index 1ed7475de454..70d352fc543f 100644
--- a/drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c
+++ b/drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c
@@ -3184,19 +3184,8 @@ i915_gem_do_execbuffer(struct drm_device *dev,
eb.num_fences = 0;

eb.batch_flags = 0;
- if (args->flags & I915_EXEC_SECURE) {
- if (GRAPHICS_VER(i915) >= 11)
- return -ENODEV;
-
- /* Return -EPERM to trigger fallback code on old binaries. */
- if (!HAS_SECURE_BATCHES(i915))
- return -EPERM;
-
- if (!drm_is_current_master(file) || !capable(CAP_SYS_ADMIN))
- return -EPERM;
-
+ if (args->flags & I915_EXEC_SECURE)
eb.batch_flags |= I915_DISPATCH_SECURE;
- }
if (args->flags & I915_EXEC_IS_PINNED)
eb.batch_flags |= I915_DISPATCH_PINNED;

@@ -3414,6 +3403,18 @@ i915_gem_execbuffer2_ioctl(struct drm_device *dev, void *data,
return -EINVAL;
}

+ if (args->flags & I915_EXEC_SECURE) {
+ if (GRAPHICS_VER(i915) >= 11)
+ return -ENODEV;
+
+ /* Return -EPERM to trigger fallback code on old binaries. */
+ if (!HAS_SECURE_BATCHES(i915))
+ return -EPERM;
+
+ if (!drm_is_current_master(file) || !capable(CAP_SYS_ADMIN))
+ return -EPERM;
+ }
+
err = i915_gem_check_execbuffer(args);
if (err)
return err;
@@ -3430,8 +3431,8 @@ i915_gem_execbuffer2_ioctl(struct drm_device *dev, void *data,
u64_to_user_ptr(args->buffers_ptr),
sizeof(*exec2_list) * count)) {
drm_dbg(&i915->drm, "copy %zd exec entries failed\n", count);
- kvfree(exec2_list);
- return -EFAULT;
+ err = -EFAULT;
+ goto err_copy;
}

err = i915_gem_do_execbuffer(dev, file, args, exec2_list);
@@ -3476,6 +3477,12 @@ end:;

args->flags &= ~__I915_EXEC_UNKNOWN_FLAGS;
kvfree(exec2_list);
+
+ return err;
+
+err_copy:
+ kvfree(exec2_list);
+
return err;
}

--
2.28.0