From d97688b6b3b709c3c2aefd99ad3fa0a399ba914c Mon Sep 17 00:00:00 2001 From: Pierre-Eric Pelloux-Prayer Date: Wed, 25 Mar 2026 15:28:42 +0100 Subject: [PATCH] drm-shim: fix shim on GLX MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit xcb_dri3_open_reply_fds will dup the fd received from the server, so we need to detect this case. Reviewed-by: Emma Anholt Reviewed-by: Samuel Pitoiset Reviewed-by: Marek Olšák Part-of: --- src/drm-shim/drm_shim.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/drm-shim/drm_shim.c b/src/drm-shim/drm_shim.c index 4547aa1ca27..789c05f3d93 100644 --- a/src/drm-shim/drm_shim.c +++ b/src/drm-shim/drm_shim.c @@ -805,8 +805,19 @@ fcntl(int fd, int cmd, ...) int ret = real_fcntl(fd, cmd, arg); - if (shim_fd && (cmd == F_DUPFD || cmd == F_DUPFD_CLOEXEC)) - drm_shim_fd_register(ret, shim_fd); + if (cmd == F_DUPFD || cmd == F_DUPFD_CLOEXEC) { + if (shim_fd) { + drm_shim_fd_register(ret, shim_fd); + } else { + /* x11_dri3_open / xcb_dri3_open_reply_fds will end up here. */ + drmVersionPtr ver = drmGetVersion(fd); + if (ver) { + drm_shim_fd_register(fd, NULL); + drm_shim_fd_register(ret, drm_shim_fd_lookup(fd)); + drmFree(ver); + } + } + } return ret; }