From: Martin Wilck <mwi...@suse.com>

We could never be 100% certain that pp->udev was always set.
With the upcoming change, we can be even less certain. Always
check pp->udev before using it.

Signed-off-by: Martin Wilck <mwi...@suse.com>
---
 libmultipath/discovery.c              | 11 +++++++++--
 libmultipath/prioritizers/alua_rtpg.c |  6 ++++--
 libmultipath/structs_vec.c            |  2 +-
 3 files changed, 14 insertions(+), 5 deletions(-)

diff --git a/libmultipath/discovery.c b/libmultipath/discovery.c
index caabfef..c202d58 100644
--- a/libmultipath/discovery.c
+++ b/libmultipath/discovery.c
@@ -339,7 +339,10 @@ sysfs_get_tgt_nodename(struct path *pp, char *node)
        struct udev_device *parent, *tgtdev;
        int host, channel, tgtid = -1;
 
-       parent = udev_device_get_parent_with_subsystem_devtype(pp->udev, 
"scsi", "scsi_device");
+       if (!pp->udev)
+               return 1;
+       parent = udev_device_get_parent_with_subsystem_devtype(pp->udev,
+                                                        "scsi", "scsi_device");
        if (!parent)
                return 1;
        /* Check for SAS */
@@ -1378,7 +1381,8 @@ nvme_sysfs_pathinfo (struct path *pp, const struct 
_vector *hwtable)
        const char *attr_path = NULL;
        const char *attr;
 
-       attr_path = udev_device_get_sysname(pp->udev);
+       if (pp->udev)
+               attr_path = udev_device_get_sysname(pp->udev);
        if (!attr_path)
                return PATHINFO_FAILED;
 
@@ -1958,6 +1962,9 @@ static ssize_t uid_fallback(struct path *pp, int 
path_state,
                }
        } else if (pp->bus == SYSFS_BUS_NVME) {
                char value[256];
+
+               if (!pp->udev)
+                       return -1;
                len = sysfs_attr_get_value(pp->udev, "wwid", value,
                                           sizeof(value));
                if (len <= 0)
diff --git a/libmultipath/prioritizers/alua_rtpg.c 
b/libmultipath/prioritizers/alua_rtpg.c
index bbf5aac..420a2e3 100644
--- a/libmultipath/prioritizers/alua_rtpg.c
+++ b/libmultipath/prioritizers/alua_rtpg.c
@@ -188,9 +188,11 @@ retry:
 int do_inquiry(const struct path *pp, int evpd, unsigned int codepage,
               void *resp, int resplen, unsigned int timeout)
 {
-       struct udev_device *ud;
+       struct udev_device *ud = NULL;
 
-       ud = udev_device_get_parent_with_subsystem_devtype(pp->udev, "scsi",
+       if (pp->udev)
+               ud = udev_device_get_parent_with_subsystem_devtype(pp->udev,
+                                                                  "scsi",
                                                           "scsi_device");
        if (ud != NULL) {
                int rc;
diff --git a/libmultipath/structs_vec.c b/libmultipath/structs_vec.c
index bc47d1e..0b8c548 100644
--- a/libmultipath/structs_vec.c
+++ b/libmultipath/structs_vec.c
@@ -494,7 +494,7 @@ int verify_paths(struct multipath *mpp, struct vectors 
*vecs)
                /*
                 * see if path is in sysfs
                 */
-               if (sysfs_attr_get_value(pp->udev, "dev",
+               if (!pp->udev || sysfs_attr_get_value(pp->udev, "dev",
                                         pp->dev_t, BLK_DEV_SIZE) < 0) {
                        if (pp->state != PATH_DOWN) {
                                condlog(1, "%s: removing valid path %s in state 
%d",
-- 
2.26.2


--
dm-devel mailing list
dm-devel@redhat.com
https://www.redhat.com/mailman/listinfo/dm-devel

Reply via email to