From 3d5a994ca8d8e766fd87a85d346c5b21f5e6c53e Mon Sep 17 00:00:00 2001
From: Aleksander Morgado <aleksander@aleksander.es>
Date: Mon, 12 Apr 2021 23:06:22 +0200
Subject: [PATCH] kerneldevice: fix segfault when processing event for
 non-existing port

    ModemManager[6954]: <warn>  [1618260091.319919] [br0] invalid sysfs path read for net/br0
    **
    ERROR:kerneldevice/mm-kernel-device-generic.c:235:ptr_array_add_sysfs_attribute_link_basename: assertion failed: (array && sysfs_path && attribute)
    Bail out! ERROR:kerneldevice/mm-kernel-device-generic.c:235:ptr_array_add_sysfs_attribute_link_basename: assertion failed: (array && sysfs_path && attribute)

    Thread 1 "ModemManager" received signal SIGABRT, Aborted.
    (gdb) bt
    #0  0x00007ffff7438ef5 in raise () at /usr/lib/libc.so.6
    #1  0x00007ffff7422862 in abort () at /usr/lib/libc.so.6
    #2  0x00007ffff76c2084 in  () at /usr/lib/libglib-2.0.so.0
    #3  0x00007ffff771d85d in g_assertion_message_expr () at /usr/lib/libglib-2.0.so.0
    #4  0x00005555556a5337 in ptr_array_add_sysfs_attribute_link_basename (array=0x5555557de520, sysfs_path=0x0, attribute=0x555555703bd8 "driver", out_value=0x0)
        at kerneldevice/mm-kernel-device-generic.c:235
    #5  0x00005555556a542b in preload_contents_other (self=0x5555557a6c60) at kerneldevice/mm-kernel-device-generic.c:255
    #6  0x00005555556a6485 in preload_contents (self=0x5555557a6c60) at kerneldevice/mm-kernel-device-generic.c:517
    #7  0x00005555556a7fb6 in check_preload (self=0x5555557a6c60) at kerneldevice/mm-kernel-device-generic.c:980
    #8  0x00005555556a855f in initable_init (initable=0x5555557a6c60, cancellable=0x0, error=0x7fffffffe5c8) at kerneldevice/mm-kernel-device-generic.c:1127
    #9  0x00007ffff78a2f41 in g_initable_new_valist () at /usr/lib/libgio-2.0.so.0
    #10 0x00007ffff78a2ffa in g_initable_new () at /usr/lib/libgio-2.0.so.0
    #11 0x00005555556a8205 in mm_kernel_device_generic_new_with_rules (props=0x5555557a5fa0, rules=0x7fffec001e30, error=0x7fffffffe5c8) at kerneldevice/mm-kernel-device-generic.c:1042
    #12 0x00005555556a827d in mm_kernel_device_generic_new (props=0x5555557a5fa0, error=0x7fffffffe5c8) at kerneldevice/mm-kernel-device-generic.c:1063
    #13 0x00005555555aba9c in handle_kernel_event (self=0x555555793220, properties=0x5555557a5fa0, error=0x7fffffffe5c8) at mm-base-manager.c:414
---
 src/kerneldevice/mm-kernel-device-generic.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/src/kerneldevice/mm-kernel-device-generic.c b/src/kerneldevice/mm-kernel-device-generic.c
index 62bf9cf22..58316e785 100644
--- a/src/kerneldevice/mm-kernel-device-generic.c
+++ b/src/kerneldevice/mm-kernel-device-generic.c
@@ -501,8 +501,10 @@ preload_contents (MMKernelDeviceGeneric *self)
         return;
 
     preload_sysfs_path (self);
-    bus_subsys = find_device_bus_subsystem (self);
+    if (!self->priv->sysfs_path)
+        return;
 
+    bus_subsys = find_device_bus_subsystem (self);
     if (g_strcmp0 (bus_subsys, "usb") == 0)
         preload_contents_usb (self);
     else if (g_strcmp0 (bus_subsys, "pcmcia") == 0)
-- 
GitLab