summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorcao <[email protected]>2016-10-15 02:00:47 +0800
committerBrian Behlendorf <[email protected]>2016-10-14 11:00:47 -0700
commitb6ca6193f7678a9d8790f4319c982cc34b59f150 (patch)
tree723fea856a781f217ecc5e4389b9bcedd1c34856
parent3691598e26a878df792480e0a97ea5c2bf012e49 (diff)
Fix coverity defects: CID 147488, 147490
CID 147488, Type:explicit null dereferenced CID 147490, Type:dereference null return value Reviewed-by: Giuseppe Di Natale <[email protected]> Reviewed-by: Brian Behlendorf <[email protected]> Signed-off-by: cao.xuewen <[email protected]> Closes #5237
-rw-r--r--lib/libzfs/libzfs_util.c8
-rw-r--r--module/zfs/spa.c2
2 files changed, 8 insertions, 2 deletions
diff --git a/lib/libzfs/libzfs_util.c b/lib/libzfs/libzfs_util.c
index 2f29027c9..ca32e7a7f 100644
--- a/lib/libzfs/libzfs_util.c
+++ b/lib/libzfs/libzfs_util.c
@@ -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));
diff --git a/module/zfs/spa.c b/module/zfs/spa.c
index 0cf07be9b..ec6924a02 100644
--- a/module/zfs/spa.c
+++ b/module/zfs/spa.c
@@ -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;