Skip to content

Commit a3f7c10

Browse files
Christian KönigChristianKoenigAMD
authored andcommitted
dma-buf/dma-resv: check if the new fence is really later
Previously when we added a fence to a dma_resv object we always assumed the the newer than all the existing fences. With Jason's work to add an UAPI to explicit export/import that's not necessary the case any more. So without this check we would allow userspace to force the kernel into an use after free error. Since the change is very small and defensive it's probably a good idea to backport this to stable kernels as well just in case others are using the dma_resv object in the same way. Signed-off-by: Christian König <[email protected]> Reviewed-by: Jason Ekstrand <[email protected]> Link: https://patchwork.freedesktop.org/patch/msgid/[email protected] Cc: [email protected] # v5.19+
1 parent 6b04ce9 commit a3f7c10

File tree

1 file changed

+2
-1
lines changed

1 file changed

+2
-1
lines changed

drivers/dma-buf/dma-resv.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -295,7 +295,8 @@ void dma_resv_add_fence(struct dma_resv *obj, struct dma_fence *fence,
295295
enum dma_resv_usage old_usage;
296296

297297
dma_resv_list_entry(fobj, i, obj, &old, &old_usage);
298-
if ((old->context == fence->context && old_usage >= usage) ||
298+
if ((old->context == fence->context && old_usage >= usage &&
299+
dma_fence_is_later(fence, old)) ||
299300
dma_fence_is_signaled(old)) {
300301
dma_resv_list_set(fobj, i, fence, usage);
301302
dma_fence_put(old);

0 commit comments

Comments
 (0)