mirror of
https://github.com/openbsd/src.git
synced 2026-05-01 09:37:02 +00:00
drm/sched: Fix potential double free in drm_sched_job_add_resv_dependencies
From Tvrtko Ursulin e5e3eb2aff92994ee81ce633f1c4e73bd4b87e11 in linux-6.12.y/6.12.55 5801e65206b065b0b2af032f7f1eef222aa2fd83 in mainline linux
This commit is contained in:
@@ -958,13 +958,14 @@ int drm_sched_job_add_resv_dependencies(struct drm_sched_job *job,
|
||||
dma_resv_assert_held(resv);
|
||||
|
||||
dma_resv_for_each_fence(&cursor, resv, usage, fence) {
|
||||
/* Make sure to grab an additional ref on the added fence */
|
||||
dma_fence_get(fence);
|
||||
ret = drm_sched_job_add_dependency(job, fence);
|
||||
if (ret) {
|
||||
dma_fence_put(fence);
|
||||
/*
|
||||
* As drm_sched_job_add_dependency always consumes the fence
|
||||
* reference (even when it fails), and dma_resv_for_each_fence
|
||||
* is not obtaining one, we need to grab one before calling.
|
||||
*/
|
||||
ret = drm_sched_job_add_dependency(job, dma_fence_get(fence));
|
||||
if (ret)
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user