]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
drm/amdgpu: Fix fence put before wait in amdgpu_amdkfd_submit_ib
authorSrinivasan Shanmugam <srinivasan.shanmugam@amd.com>
Mon, 23 Mar 2026 08:11:18 +0000 (13:41 +0530)
committerAlex Deucher <alexander.deucher@amd.com>
Tue, 24 Mar 2026 17:53:33 +0000 (13:53 -0400)
amdgpu_amdkfd_submit_ib() submits a GPU job and gets a fence
from amdgpu_ib_schedule(). This fence is used to wait for job
completion.

Currently, the code drops the fence reference using dma_fence_put()
before calling dma_fence_wait().

If dma_fence_put() releases the last reference, the fence may be
freed before dma_fence_wait() is called. This can lead to a
use-after-free.

Fix this by waiting on the fence first and releasing the reference
only after dma_fence_wait() completes.

Fixes the below:
drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c:697 amdgpu_amdkfd_submit_ib() warn: passing freed memory 'f' (line 696)

Fixes: 9ae55f030dc5 ("drm/amdgpu: Follow up change to previous drm scheduler change.")
Cc: Felix Kuehling <Felix.Kuehling@amd.com>
Cc: Dan Carpenter <dan.carpenter@linaro.org>
Cc: Christian König <christian.koenig@amd.com>
Cc: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Srinivasan Shanmugam <srinivasan.shanmugam@amd.com>
Reviewed-by: Christian König <christian.koenig@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
(cherry picked from commit 8b9e5259adc385b61a6590a13b82ae0ac2bd3482)

drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c

index 40c22438b1d27d321a5d44983c4ffc68d75de51e..4f27c75abedb6f227ebe0e238b0334a3005c9fa5 100644 (file)
@@ -692,9 +692,9 @@ int amdgpu_amdkfd_submit_ib(struct amdgpu_device *adev,
                goto err_ib_sched;
        }
 
-       /* Drop the initial kref_init count (see drm_sched_main as example) */
-       dma_fence_put(f);
        ret = dma_fence_wait(f, false);
+       /* Drop the returned fence reference after the wait completes */
+       dma_fence_put(f);
 
 err_ib_sched:
        amdgpu_job_free(job);