From 32957eca8129f926d205310ee7efbc1168e8ebdc Mon Sep 17 00:00:00 2001 Message-Id: <32957eca8129f926d205310ee7efbc1168e8ebdc@dist-git> From: Marc Hartmayer Date: Thu, 8 Oct 2020 11:07:00 -0400 Subject: [PATCH] udevProcessCSS: Check if def->driver is non-NULL Don't process subchannel devices where `def->driver` is not set. This fixes the following segfault: Thread 21 "nodedev-init" received signal SIGSEGV, Segmentation fault. [Switching to Thread 0x3ffb08fc910 (LWP 64303)] (gdb) bt #0 0x000003fffd1272b4 in __strcmp_vx () at /lib64/libc.so.6 #1 0x000003ffc260c3a8 in udevProcessCSS (device=0x3ff9018d130, def=0x3ff90194a90) #2 0x000003ffc260cb78 in udevGetDeviceDetails (device=0x3ff9018d130, def=0x3ff90194a90) #3 0x000003ffc260d126 in udevAddOneDevice (device=0x3ff9018d130) #4 0x000003ffc260d414 in udevProcessDeviceListEntry (udev=0x3ffa810d800, list_entry=0x3ff90001990) #5 0x000003ffc260d638 in udevEnumerateDevices (udev=0x3ffa810d800) #6 0x000003ffc260e08e in nodeStateInitializeEnumerate (opaque=0x3ffa810d800) #7 0x000003fffdaa14b6 in virThreadHelper (data=0x3ffa810df00) #8 0x000003fffc309ed6 in start_thread () #9 0x000003fffd185e66 in thread_start () (gdb) p *def $2 = { name = 0x0, sysfs_path = 0x3ff90198e80 "/sys/devices/css0/0.0.ff40", parent = 0x0, parent_sysfs_path = 0x0, parent_wwnn = 0x0, parent_wwpn = 0x0, parent_fabric_wwn = 0x0, driver = 0x0, devnode = 0x0, devlinks = 0x3ff90194670, caps = 0x3ff90194380 } Fixes: 05e6cdafa6e0 ("node_device: detect CSS devices") Reviewed-by: Boris Fiuczynski Reviewed-by: Erik Skultety Signed-off-by: Marc Hartmayer (cherry picked from commit cb09344a2cccc0cc9bcefa3cb53d7af45ba92631) https://bugzilla.redhat.com/show_bug.cgi?id=1853289 https://bugzilla.redhat.com/show_bug.cgi?id=1865932 Message-Id: <20201008150700.52157-6-bfiuczyn@redhat.com> Reviewed-by: Erik Skultety --- src/node_device/node_device_udev.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/node_device/node_device_udev.c b/src/node_device/node_device_udev.c index b6b28bc35a..88cf1edf50 100644 --- a/src/node_device/node_device_udev.c +++ b/src/node_device/node_device_udev.c @@ -1130,8 +1130,9 @@ udevProcessCSS(struct udev_device *device, virNodeDeviceDefPtr def) { /* only process IO subchannel and vfio-ccw devices to keep the list sane */ - if (STRNEQ(def->driver, "io_subchannel") && - STRNEQ(def->driver, "vfio_ccw")) + if (!def->driver || + (STRNEQ(def->driver, "io_subchannel") && + STRNEQ(def->driver, "vfio_ccw"))) return -1; if (udevGetCCWAddress(def->sysfs_path, &def->caps->data) < 0) -- 2.28.0