Currently, if we error out before gbm_dri is set (say due to a different name of the backing GBM implementation, or otherwise) the tear down will trigger a NULL ptr deref and crash out. Move the gbm_dri initialization as early as possible. v2: Drop check in dri2_teardowm_drm (Eric) Reported-by: Christian Gmeiner <christian.gmeiner@gmail.com> Cc: Christian Gmeiner <christian.gmeiner@gmail.com> Cc: mesa-stable@lists.freedesktop.org Signed-off-by: Emil Velikov <emil.velikov@collabora.com> Reviewed-by: Eric Engestrom <eric.engestrom@intel.com>tags/19.2-branchpoint
@@ -715,6 +715,7 @@ dri2_initialize_drm(_EGLDriver *drv, _EGLDisplay *disp) | |||
goto cleanup; | |||
} | |||
} | |||
dri2_dpy->gbm_dri = gbm_dri_device(gbm); | |||
if (strcmp(gbm_device_get_backend_name(gbm), "drm") != 0) { | |||
err = "DRI2: gbm device using incorrect/incompatible backend"; | |||
@@ -729,7 +730,6 @@ dri2_initialize_drm(_EGLDriver *drv, _EGLDisplay *disp) | |||
disp->Device = dev; | |||
dri2_dpy->gbm_dri = gbm_dri_device(gbm); | |||
dri2_dpy->driver_name = strdup(dri2_dpy->gbm_dri->driver_name); | |||
dri2_dpy->dri_screen = dri2_dpy->gbm_dri->screen; |