[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