From 578ff2246411e9dbd4f14cbc34e03ebe173de8d0 Mon Sep 17 00:00:00 2001 From: Hans de Goede Date: Fri, 2 Aug 2019 22:57:28 +0200 Subject: [PATCH] kms: drmModeGetCrtc may fail drmModeGetCrtc may fail and return NULL. This will trigger when meta_kms_crtc_update_state gets called from meta_kms_update_states_sync after a GPU has been unplugged leading to a NULL pointer deref causing a crash. This commit fixes this by checking for NULL and clearing the current_state when NULL is returned. https://gitlab.gnome.org/GNOME/mutter/merge_requests/713 --- src/backends/native/meta-kms-crtc.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/backends/native/meta-kms-crtc.c b/src/backends/native/meta-kms-crtc.c index b07a6e7d5..2b0f5385a 100644 --- a/src/backends/native/meta-kms-crtc.c +++ b/src/backends/native/meta-kms-crtc.c @@ -132,6 +132,13 @@ meta_kms_crtc_update_state (MetaKmsCrtc *crtc) impl_device = meta_kms_device_get_impl_device (crtc->device); drm_crtc = drmModeGetCrtc (meta_kms_impl_device_get_fd (impl_device), crtc->id); + if (!drm_crtc) + { + crtc->current_state.rect = (MetaRectangle) { }; + crtc->current_state.is_drm_mode_valid = FALSE; + return; + } + meta_kms_crtc_read_state (crtc, impl_device, drm_crtc); drmModeFreeCrtc (drm_crtc); }