From 6e1564fc17d944fb6e24a9ed64cee2fec9e6ef7d Mon Sep 17 00:00:00 2001 From: Fabian Vogt Date: Wed, 22 Sep 2021 22:53:51 +0200 Subject: [PATCH] gbm_dmabuf: Fix crash if gbm_bo_create fails And perform proper cleanup if eglCreateImageKHR fails. --- src/plugins/platforms/drm/gbm_dmabuf.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/plugins/platforms/drm/gbm_dmabuf.cpp b/src/plugins/platforms/drm/gbm_dmabuf.cpp index 10abe6b53f..fab7bda185 100644 --- a/src/plugins/platforms/drm/gbm_dmabuf.cpp +++ b/src/plugins/platforms/drm/gbm_dmabuf.cpp @@ -38,7 +38,6 @@ KWin::GbmDmaBuf *GbmDmaBuf::createBuffer(const QSize &size, gbm_device *device) auto bo = gbm_bo_create(device, size.width(), size.height(), GBM_FORMAT_ARGB8888, GBM_BO_USE_RENDERING | GBM_BO_USE_LINEAR); if (!bo) { - gbm_bo_destroy(bo); return nullptr; } @@ -61,6 +60,8 @@ KWin::GbmDmaBuf *GbmDmaBuf::createBuffer(const QSize &size, gbm_device *device) EGLDisplay display = kwinApp()->platform()->sceneEglDisplay(); EGLImageKHR destinationImage = eglCreateImageKHR(display, EGL_NO_CONTEXT, EGL_LINUX_DMA_BUF_EXT, nullptr, importAttributes); if (destinationImage == EGL_NO_IMAGE_KHR) { + close(fd); + gbm_bo_destroy(bo); return nullptr; }