]> git.proxmox.com Git - mirror_zfs.git/commitdiff
Fix coverity defects: CID 147488, 147490
authorcao <cao.xuewen@zte.com.cn>
Fri, 14 Oct 2016 18:00:47 +0000 (02:00 +0800)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Fri, 14 Oct 2016 18:00:47 +0000 (11:00 -0700)
CID 147488, Type:explicit null dereferenced
CID 147490, Type:dereference null return value

Reviewed-by: Giuseppe Di Natale <dinatale2@llnl.gov>
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: cao.xuewen <cao.xuewen@zte.com.cn>
Closes #5237

lib/libzfs/libzfs_util.c
module/zfs/spa.c

index 2f29027c951846497c503858a00c959003e85429..ca32e7a7f5c42754687a3118b6b7004978ef0fd1 100644 (file)
@@ -1585,6 +1585,7 @@ zprop_parse_value(libzfs_handle_t *hdl, nvpair_t *elem, int prop,
        const char *propname;
        char *value;
        boolean_t isnone = B_FALSE;
+       int err = 0;
 
        if (type == ZFS_TYPE_POOL) {
                proptype = zpool_prop_get_type(prop);
@@ -1607,7 +1608,12 @@ zprop_parse_value(libzfs_handle_t *hdl, nvpair_t *elem, int prop,
                            "'%s' must be a string"), nvpair_name(elem));
                        goto error;
                }
-               (void) nvpair_value_string(elem, svalp);
+               err = nvpair_value_string(elem, svalp);
+               if (err != 0) {
+                       zfs_error_aux(hdl, dgettext(TEXT_DOMAIN,
+                           "'%s' is invalid"), nvpair_name(elem));
+                       goto error;
+               }
                if (strlen(*svalp) >= ZFS_MAXPROPLEN) {
                        zfs_error_aux(hdl, dgettext(TEXT_DOMAIN,
                            "'%s' is too long"), nvpair_name(elem));
index 0cf07be9b4cfa753fd6cfa41ba3321a9b332e3ca..ec6924a020b46e74c68abc730bc6f3f46f2771d4 100644 (file)
@@ -4947,7 +4947,7 @@ spa_vdev_detach(spa_t *spa, uint64_t guid, uint64_t pguid, int replace_done)
         * But first make sure we're not on any *other* txg's DTL list, to
         * prevent vd from being accessed after it's freed.
         */
-       vdpath = spa_strdup(vd->vdev_path);
+       vdpath = spa_strdup(vd->vdev_path ? vd->vdev_path : "none");
        for (t = 0; t < TXG_SIZE; t++)
                (void) txg_list_remove_this(&tvd->vdev_dtl_list, vd, t);
        vd->vdev_detached = B_TRUE;