1
0
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:
jsg
2025-10-24 01:49:13 +00:00
parent 4e92f871a1
commit a190b5770a

View File

@@ -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;
}