All of lore.kernel.org
 help / color / mirror / Atom feed
* [Intel-xe] [PATCH] drm/xe: Get the engine ref while holding a lock
@ 2023-06-02 15:21 Mika Kuoppala
  2023-06-02 15:39 ` [Intel-xe] ✓ CI.Patch_applied: success for " Patchwork
                   ` (8 more replies)
  0 siblings, 9 replies; 11+ messages in thread
From: Mika Kuoppala @ 2023-06-02 15:21 UTC (permalink / raw)
  To: intel-xe

The engine xarray holds a ref to engine, guarded by the lock.
While we do lookup for engine, we need to take the ref inside
the lock to prevent potential use-after-free during
ioctls.

Signed-off-by: Mika Kuoppala <mika.kuoppala@linux.intel.com>
---
 drivers/gpu/drm/xe/xe_engine.c | 18 +++++++++---------
 1 file changed, 9 insertions(+), 9 deletions(-)

diff --git a/drivers/gpu/drm/xe/xe_engine.c b/drivers/gpu/drm/xe/xe_engine.c
index b3036c4a8ec3..ec5a79c9f2a3 100644
--- a/drivers/gpu/drm/xe/xe_engine.c
+++ b/drivers/gpu/drm/xe/xe_engine.c
@@ -161,10 +161,9 @@ struct xe_engine *xe_engine_lookup(struct xe_file *xef, u32 id)
 
 	mutex_lock(&xef->engine.lock);
 	e = xa_load(&xef->engine.xa, id);
-	mutex_unlock(&xef->engine.lock);
-
-	if (e)
+	if (likely(e))
 		xe_engine_get(e);
+	mutex_unlock(&xef->engine.lock);
 
 	return e;
 }
@@ -641,26 +640,27 @@ int xe_engine_get_property_ioctl(struct drm_device *dev, void *data,
 	struct xe_file *xef = to_xe_file(file);
 	struct drm_xe_engine_get_property *args = data;
 	struct xe_engine *e;
+	int ret;
 
 	if (XE_IOCTL_ERR(xe, args->reserved[0] || args->reserved[1]))
 		return -EINVAL;
 
-	mutex_lock(&xef->engine.lock);
-	e = xa_load(&xef->engine.xa, args->engine_id);
-	mutex_unlock(&xef->engine.lock);
-
+	e = xe_engine_lookup(xef, args->engine_id);
 	if (XE_IOCTL_ERR(xe, !e))
 		return -ENOENT;
 
 	switch (args->property) {
 	case XE_ENGINE_GET_PROPERTY_BAN:
 		args->value = !!(e->flags & ENGINE_FLAG_BANNED);
+		ret = 0;
 		break;
 	default:
-		return -EINVAL;
+		ret = -EINVAL;
 	}
 
-	return 0;
+	xe_engine_put(e);
+
+	return ret;
 }
 
 static void engine_kill_compute(struct xe_engine *e)
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2023-06-06  9:46 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-06-02 15:21 [Intel-xe] [PATCH] drm/xe: Get the engine ref while holding a lock Mika Kuoppala
2023-06-02 15:39 ` [Intel-xe] ✓ CI.Patch_applied: success for " Patchwork
2023-06-02 15:39 ` [Intel-xe] ✓ CI.checkpatch: " Patchwork
2023-06-02 15:39 ` [Intel-xe] [PATCH] " Thomas Hellström
2023-06-02 17:18   ` Mika Kuoppala
2023-06-02 15:40 ` [Intel-xe] ✓ CI.KUnit: success for " Patchwork
2023-06-02 15:44 ` [Intel-xe] ✓ CI.Build: " Patchwork
2023-06-02 15:44 ` [Intel-xe] ✓ CI.Hooks: " Patchwork
2023-06-02 15:45 ` [Intel-xe] ✓ CI.checksparse: " Patchwork
2023-06-02 16:11 ` [Intel-xe] ✗ CI.BAT: failure " Patchwork
2023-06-06  9:46 ` [Intel-xe] ○ CI.BAT: info " Patchwork

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.