]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
drm/xe: Fix memory leak in exec_queue_set_hang_replay_state()
authorMichał Winiarski <michal.winiarski@intel.com>
Wed, 24 Jun 2026 11:14:20 +0000 (13:14 +0200)
committerRodrigo Vivi <rodrigo.vivi@intel.com>
Tue, 4 Aug 2026 17:52:17 +0000 (13:52 -0400)
The q->replay_state is blindly overwritten, which can potentially leak
memory that was previously allocated by vmemdup_user().
Return an error if q->replay_state is not empty.

Discovered using AI-assisted static analysis confirmed by Intel Product
Security.

Reported-by: Martin Hodo <martin.hodo@intel.com>
Fixes: 1026c1a73a96 ("drm/xe: Implement DRM_XE_EXEC_QUEUE_SET_HANG_REPLAY_STATE")
Reviewed-by: Matthew Brost <matthew.brost@intel.com>
Link: https://patch.msgid.link/20260624111421.1258364-1-michal.winiarski@intel.com
Signed-off-by: Michał Winiarski <michal.winiarski@intel.com>
(cherry picked from commit f6b6cc1118bdbc4265fa8b3bdf8565b26f13e56e)
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
drivers/gpu/drm/xe/xe_exec_queue.c

index 1b5ca3ce578a4a846dffa1ae5fdd3d890779656d..663decb19304da52d0bd3a8bf62d43bdf18966d1 100644 (file)
@@ -805,6 +805,9 @@ static int exec_queue_set_hang_replay_state(struct xe_device *xe,
        u64 __user *address = u64_to_user_ptr(value);
        void *ptr;
 
+       if (q->replay_state)
+               return -EINVAL;
+
        ptr = vmemdup_user(address, size);
        if (XE_IOCTL_DBG(xe, IS_ERR(ptr)))
                return PTR_ERR(ptr);