From b6962bbfc803669e418e82ae5afe32046c0975c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Corentin=20No=C3=ABl?= Date: Mon, 26 Feb 2024 09:22:30 +0100 Subject: [PATCH] zink: Return early if the file descriptor could not have been duplicated/acquired MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Do not continue and call drmIoctl on an invalid file descriptor. Fix defect reported by Coverity Scan. Argument cannot be negative The negative argument will be interpreted as a very large unsigned value. CID: 1544377 Cc: mesa-stable Signed-off-by: Corentin Noël Part-of: --- src/gallium/drivers/zink/zink_screen.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/gallium/drivers/zink/zink_screen.c b/src/gallium/drivers/zink/zink_screen.c index 035e742c98a..f871a080232 100644 --- a/src/gallium/drivers/zink/zink_screen.c +++ b/src/gallium/drivers/zink/zink_screen.c @@ -2367,7 +2367,7 @@ zink_screen_export_dmabuf_semaphore(struct zink_screen *screen, struct zink_reso .fd = -1, }; - int fd; + int fd = -1; if (res->obj->is_aux) { fd = os_dupfd_cloexec(res->obj->handle); } else { @@ -2378,6 +2378,11 @@ zink_screen_export_dmabuf_semaphore(struct zink_screen *screen, struct zink_reso VKSCR(GetMemoryFdKHR)(screen->dev, &fd_info, &fd); } + if (unlikely(fd < 0)) { + mesa_loge("MESA: Unable to get a valid memory fd"); + return VK_NULL_HANDLE; + } + int ret = drmIoctl(fd, DMA_BUF_IOCTL_EXPORT_SYNC_FILE, &export); if (ret) { if (errno == ENOTTY || errno == EBADF || errno == ENOSYS) {