From b27b5cd5f3c2f6e17e0c68f783dca7273b7d2d84 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michel=20D=C3=A4nzer?= Date: Tue, 4 Feb 2025 11:09:29 +0100 Subject: [PATCH] xwayland/glamor: Clean-up GBM's screen private on failure MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit If we bail out initializing GBM glamor backend, the screen private for the GBM backend may remain, pointing at freed memory. To avoid that issue, make sure to clear up the screen's private for the GBM backend. Closes: https://gitlab.freedesktop.org/xorg/xserver/-/issues/1785 Signed-off-by: Michel Dänzer Part-of: --- hw/xwayland/xwayland-glamor-gbm.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/hw/xwayland/xwayland-glamor-gbm.c b/hw/xwayland/xwayland-glamor-gbm.c index 21c0dd594..ce80284e0 100644 --- a/hw/xwayland/xwayland-glamor-gbm.c +++ b/hw/xwayland/xwayland-glamor-gbm.c @@ -631,6 +631,9 @@ xwl_glamor_gbm_cleanup(struct xwl_screen *xwl_screen) { struct xwl_gbm_private *xwl_gbm = xwl_gbm_get(xwl_screen); + if (!xwl_gbm) + return; + if (xwl_gbm->device_name) free(xwl_gbm->device_name); drmFreeDevice(&xwl_gbm->device); @@ -643,6 +646,8 @@ xwl_glamor_gbm_cleanup(struct xwl_screen *xwl_screen) if (xwl_screen->explicit_sync) wp_linux_drm_syncobj_manager_v1_destroy(xwl_screen->explicit_sync); + dixSetPrivate(&xwl_screen->screen->devPrivates, &xwl_gbm_private_key, + NULL); free(xwl_gbm); }