Control: reassign -1 libmutter-2-0
Control: tags -1 patch upstream

I followed this through a backtrace from a coredump obtained by
systemd-coredump:

      Message: Process 1426 (gnome-shell) of user 112 dumped core.

                Stack trace of thread 1426:
                #0  0x00007fa82bfe346d meta_gpu_kms_new (libmutter-2.so.0)
                #1  0x00007fa82bfe4d0a
meta_monitor_manager_kms_initable_init (libmutter-2.so.0)
                #2  0x00007fa82d9ed557 g_initable_new_valist
(libgio-2.0.so.0)
                #3  0x00007fa82d9ed609 g_initable_new (libgio-2.0.so.0)
                #4  0x00007fa82bf438c1 meta_backend_create_monitor_manager
(libmutter-2.so.0)
                #5  0x00007fa82bf442e4 meta_init_backend (libmutter-2.so.0)
                #6  0x00007fa82bf8be7f meta_init (libmutter-2.so.0)
                #7  0x000056451b90b59a main (gnome-shell)
                #8  0x00007fa82bd27b17 __libc_start_main (libc.so.6)
                #9  0x000056451b90b9ca _start (gnome-shell)

There was a missing check for NULL return on error, which was subsequently
dereferenced, leading to the crash. The attached patch fixed the crash for
me.
Description: Check for error return from drmModeGetResources
 drmModeGetResources is documented as returning NULL in case of
 error. The code was not checking for this case, and unconditionlly
 dereferenced its result, leading to a crash.
Bug-Debian: https://bugs.debian.org/900002
Author: Phil Miller <unmob...@gmail.com>

--- mutter-3.28.2.orig/src/backends/native/meta-gpu-kms.c
+++ mutter-3.28.2/src/backends/native/meta-gpu-kms.c
@@ -801,6 +801,16 @@ meta_gpu_kms_new (MetaMonitorManagerKms
    */
   drm_resources = drmModeGetResources (kms_fd);
 
+  if (!drm_resources)
+    {
+      g_set_error(error,
+                   META_GPU_KMS_ERROR,
+                   META_GPU_KMS_ERROR_NO_CONNECTORS,
+                  "drm_resources unexpectedly came back NULL.");
+      meta_launcher_close_restricted (launcher, kms_fd);
+      return NULL;                  
+    }
+  
   n_connectors = drm_resources->count_connectors;
 
   drmModeFreeResources (drm_resources);

Reply via email to