]> git.proxmox.com Git - mirror_zfs.git/commitdiff
zed: Avoid core dump if wholedisk property does not exist
authorAmeer Hamza <106930537+ixhamza@users.noreply.github.com>
Fri, 21 Oct 2022 17:46:38 +0000 (22:46 +0500)
committerGitHub <noreply@github.com>
Fri, 21 Oct 2022 17:46:38 +0000 (10:46 -0700)
zed aborts and dumps core in vdev_whole_disk_from_config() if
wholedisk property does not exist. make_leaf_vdev() adds the
property but there may be already pools that don't have the
wholedisk in the label.

Reviewed-by: Ryan Moeller <ryan@iXsystems.com>
Reviewed-by: Alexander Motin <mav@FreeBSD.org>
Reviewed-by: Richard Yao <richard.yao@alumni.stonybrook.edu>
Signed-off-by: Ameer Hamza <ahamza@ixsystems.com>
Closes #14062

cmd/zed/agents/zfs_mod.c

index 44abb4eb9a340f8430432fd979ebeac3ba80750a..0271fffe42ef7b2d43d1fde410b538384ac4863a 100644 (file)
@@ -948,14 +948,13 @@ vdev_whole_disk_from_config(zpool_handle_t *zhp, const char *vdev_path)
 {
        nvlist_t *nvl = NULL;
        boolean_t avail_spare, l2cache, log;
-       uint64_t wholedisk;
+       uint64_t wholedisk = 0;
 
        nvl = zpool_find_vdev(zhp, vdev_path, &avail_spare, &l2cache, &log);
        if (!nvl)
                return (0);
 
-       verify(nvlist_lookup_uint64(nvl, ZPOOL_CONFIG_WHOLE_DISK,
-           &wholedisk) == 0);
+       (void) nvlist_lookup_uint64(nvl, ZPOOL_CONFIG_WHOLE_DISK, &wholedisk);
 
        return (wholedisk);
 }
@@ -994,7 +993,7 @@ zfsdle_vdev_online(zpool_handle_t *zhp, void *data)
        if ((tgt = zpool_find_vdev_by_physpath(zhp, devname,
            &avail_spare, &l2cache, NULL)) != NULL) {
                char *path, fullpath[MAXPATHLEN];
-               uint64_t wholedisk;
+               uint64_t wholedisk = 0;
 
                error = nvlist_lookup_string(tgt, ZPOOL_CONFIG_PATH, &path);
                if (error) {
@@ -1002,10 +1001,8 @@ zfsdle_vdev_online(zpool_handle_t *zhp, void *data)
                        return (0);
                }
 
-               error = nvlist_lookup_uint64(tgt, ZPOOL_CONFIG_WHOLE_DISK,
+               (void) nvlist_lookup_uint64(tgt, ZPOOL_CONFIG_WHOLE_DISK,
                    &wholedisk);
-               if (error)
-                       wholedisk = 0;
 
                if (wholedisk) {
                        path = strrchr(path, '/');