]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/xe/eustall: Fix drm_dev_put called before stream disable in close
authorShuicheng Lin <shuicheng.lin@intel.com>
Wed, 15 Apr 2026 22:54:28 +0000 (22:54 +0000)
committerRodrigo Vivi <rodrigo.vivi@intel.com>
Wed, 29 Apr 2026 16:51:20 +0000 (12:51 -0400)
In xe_eu_stall_stream_close(), drm_dev_put() is called before the
stream is disabled and its resources are freed. If this drops the
last reference, the device structures could be freed while the
subsequent cleanup code still accesses them, leading to a
use-after-free.

Fix this by moving drm_dev_put() after all device accesses are
complete. This matches the ordering in xe_oa_release().

Fixes: 9a0b11d4cf3b ("drm/xe/eustall: Add support to init, enable and disable EU stall sampling")
Cc: Harish Chegondi <harish.chegondi@intel.com>
Assisted-by: Claude:claude-opus-4.6
Signed-off-by: Shuicheng Lin <shuicheng.lin@intel.com>
Reviewed-by: Harish Chegondi <harish.chegondi@intel.com>
Link: https://patch.msgid.link/20260415225428.3399934-1-shuicheng.lin@intel.com
Signed-off-by: Matt Roper <matthew.d.roper@intel.com>
(cherry picked from commit 35aff528f7297e949e5e19c9cd7fd748cf1cf21c)
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
drivers/gpu/drm/xe/xe_eu_stall.c

index c34408cfd292c3127437f5343eb80b0777c5c88e..dddcdd0bb7a33e04551ad784cae11a10f06b5033 100644 (file)
@@ -869,14 +869,14 @@ static int xe_eu_stall_stream_close(struct inode *inode, struct file *file)
        struct xe_eu_stall_data_stream *stream = file->private_data;
        struct xe_gt *gt = stream->gt;
 
-       drm_dev_put(&gt->tile->xe->drm);
-
        mutex_lock(&gt->eu_stall->stream_lock);
        xe_eu_stall_disable_locked(stream);
        xe_eu_stall_data_buf_destroy(stream);
        xe_eu_stall_stream_free(stream);
        mutex_unlock(&gt->eu_stall->stream_lock);
 
+       drm_dev_put(&gt->tile->xe->drm);
+
        return 0;
 }