[PATCH] drm/prime: fix drm_prime_add_buf_handle

Christian König ckoenig.leichtzumerken at gmail.com
Fri Jun 13 13:12:01 UTC 2025


It is possible through flink or IOCTLs like MODE_GETFB2 to create
multiple handles for the same underlying GEM object.

But in prime we explicitely don't want to have multiple handles for the
same DMA-buf. So just ignore it if a DMA-buf is exported with another
handle.

This was made obvious by removing the extra check in
drm_gem_prime_handle_to_dmabuf() to not add the handle if we could already
find it in the housekeeping structures.

Signed-off-by: Christian König <christian.koenig at amd.com>
---
 drivers/gpu/drm/drm_prime.c | 11 +++++++++++
 1 file changed, 11 insertions(+)

diff --git a/drivers/gpu/drm/drm_prime.c b/drivers/gpu/drm/drm_prime.c
index 1d93b44c00c4..f5f30d947b61 100644
--- a/drivers/gpu/drm/drm_prime.c
+++ b/drivers/gpu/drm/drm_prime.c
@@ -113,6 +113,17 @@ static int drm_prime_add_buf_handle(struct drm_prime_file_private *prime_fpriv,
 
 		rb = *p;
 		pos = rb_entry(rb, struct drm_prime_member, dmabuf_rb);
+
+		/*
+		 * Just ignore the new handle if we already have an handle for
+		 * this DMA-buf.
+		 */
+		if (dma_buf == pos->dma_buf) {
+			dma_buf_put(dma_buf);
+			kfree(member);
+			return 0;
+
+		}
 		if (dma_buf > pos->dma_buf)
 			p = &rb->rb_right;
 		else
-- 
2.34.1



More information about the dri-devel mailing list