From: Daniel van Vugt Date: Fri, 4 Apr 2025 09:41:37 +0000 (+0800) Subject: drisw: Avoid crashing when swrast_loader == NULL X-Git-Tag: archive/raspbian/25.0.7-2+rpi1^2^2^2~1 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=3e537dfbcedb80e6dace2f2599bb47057f6c904c;p=mesa.git drisw: Avoid crashing when swrast_loader == NULL This is a blanket fix for all the segfaults in `drisw_init_screen()` when `swrast_loader` is NULL, since 1de7c86bc1. A similar more targeted fix for vmwgfx can be found in f3b8d7da46 ("egl: never select swrast for vmwgfx"). We can safely return NULL because the caller `driCreateNewScreen3` handles NULL, as does its own callers. As this is currently the top crasher of gnome-shell since Ubuntu upgraded to Mesa 25 and it seems to be coming from multiple different drivers still, we want a universal fix to at least stop the crash reports. People can figure out which drivers still need tweaking in `dri2_load_driver` or elsewhere later. Fixes: 1de7c86bc1 ("dri: pass through a type enum for creating screen instead of driver_extensions") Related: https://gitlab.freedesktop.org/mesa/mesa/-/issues/12678 (radeon) Related: https://gitlab.freedesktop.org/mesa/mesa/-/issues/12859 (radeon) Related: https://gitlab.freedesktop.org/mesa/mesa/-/issues/12300 (nvidia-drm) Related: https://gitlab.freedesktop.org/mesa/mesa/-/issues/12462 (nvidia-drm) Bug-Ubuntu: https://bugs.launchpad.net/bugs/2101817 Gbp-Pq: Name drisw-Avoid-crashing-when-swrast_loader-NULL.patch --- diff --git a/src/gallium/frontends/dri/drisw.c b/src/gallium/frontends/dri/drisw.c index 4590b57e6..9bb308838 100644 --- a/src/gallium/frontends/dri/drisw.c +++ b/src/gallium/frontends/dri/drisw.c @@ -32,6 +32,7 @@ #include "util/u_memory.h" #include "util/u_inlines.h" #include "util/box.h" +#include "util/log.h" #include "pipe/p_context.h" #include "pipe-loader/pipe_loader.h" #include "frontend/drisw_api.h" @@ -620,6 +621,13 @@ drisw_init_screen(struct dri_screen *screen, bool driver_name_is_inferred) screen->swrast_no_present = debug_get_option_swrast_no_present(); + if (loader == NULL) { + /* If you are reading this then dri2_load_driver may need tweaking */ + mesa_logw("swrast was requested but driver is missing %s", + __DRI_SWRAST_LOADER); + return NULL; + } + if (loader->base.version >= 4) { if (loader->putImageShm) lf = &drisw_shm_lf;