summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorcao <[email protected]>2016-09-30 03:11:44 +0800
committerBrian Behlendorf <[email protected]>2016-09-29 12:11:44 -0700
commit9ec0403d6acd3ab362905b74c5db6aaf31c71f47 (patch)
tree041cafe2f8e4b64fbadd7e3fda8347c11c445d9b
parentc9d61adbf8f422fe8d3bda45d9de9e82c757d0b0 (diff)
Fix coverity defects: CID 147610, 147608, 147607
coverity scan CID:147610, Type: Resource leak. coverity scan CID:147608, Type: Resource leak. coverity scan CID:147607, Type: Resource leak. Reviewed-by: Richard Laager <[email protected]> Reviewed-by: Brian Behlendorf <[email protected]> Signed-off-by: cao.xuewen <[email protected]> Closes #5143
-rw-r--r--cmd/zfs/zfs_main.c5
-rw-r--r--cmd/zpool/zpool_vdev.c30
2 files changed, 19 insertions, 16 deletions
diff --git a/cmd/zfs/zfs_main.c b/cmd/zfs/zfs_main.c
index 301e2957e..a4ffb1f44 100644
--- a/cmd/zfs/zfs_main.c
+++ b/cmd/zfs/zfs_main.c
@@ -6700,9 +6700,10 @@ zfs_do_diff(int argc, char **argv)
if ((atp = strchr(copy, '@')))
*atp = '\0';
- if ((zhp = zfs_open(g_zfs, copy, ZFS_TYPE_FILESYSTEM)) == NULL)
+ if ((zhp = zfs_open(g_zfs, copy, ZFS_TYPE_FILESYSTEM)) == NULL) {
+ free(copy);
return (1);
-
+ }
free(copy);
/*
diff --git a/cmd/zpool/zpool_vdev.c b/cmd/zpool/zpool_vdev.c
index 0614caf6b..b51b9c9c3 100644
--- a/cmd/zpool/zpool_vdev.c
+++ b/cmd/zpool/zpool_vdev.c
@@ -1445,6 +1445,7 @@ construct_spec(nvlist_t *props, int argc, char **argv)
nl2cache = 0;
is_log = B_FALSE;
seen_logs = B_FALSE;
+ nvroot = NULL;
while (argc > 0) {
nv = NULL;
@@ -1463,7 +1464,7 @@ construct_spec(nvlist_t *props, int argc, char **argv)
gettext("invalid vdev "
"specification: 'spare' can be "
"specified only once\n"));
- return (NULL);
+ goto spec_out;
}
is_log = B_FALSE;
}
@@ -1474,7 +1475,7 @@ construct_spec(nvlist_t *props, int argc, char **argv)
gettext("invalid vdev "
"specification: 'log' can be "
"specified only once\n"));
- return (NULL);
+ goto spec_out;
}
seen_logs = B_TRUE;
is_log = B_TRUE;
@@ -1493,7 +1494,7 @@ construct_spec(nvlist_t *props, int argc, char **argv)
gettext("invalid vdev "
"specification: 'cache' can be "
"specified only once\n"));
- return (NULL);
+ goto spec_out;
}
is_log = B_FALSE;
}
@@ -1504,7 +1505,7 @@ construct_spec(nvlist_t *props, int argc, char **argv)
gettext("invalid vdev "
"specification: unsupported 'log' "
"device: %s\n"), type);
- return (NULL);
+ goto spec_out;
}
nlogs++;
}
@@ -1522,7 +1523,7 @@ construct_spec(nvlist_t *props, int argc, char **argv)
for (c = 0; c < children - 1; c++)
nvlist_free(child[c]);
free(child);
- return (NULL);
+ goto spec_out;
}
child[children - 1] = nv;
@@ -1535,7 +1536,7 @@ construct_spec(nvlist_t *props, int argc, char **argv)
for (c = 0; c < children; c++)
nvlist_free(child[c]);
free(child);
- return (NULL);
+ goto spec_out;
}
if (children > maxdev) {
@@ -1545,7 +1546,7 @@ construct_spec(nvlist_t *props, int argc, char **argv)
for (c = 0; c < children; c++)
nvlist_free(child[c]);
free(child);
- return (NULL);
+ goto spec_out;
}
argc -= c;
@@ -1586,7 +1587,8 @@ construct_spec(nvlist_t *props, int argc, char **argv)
*/
if ((nv = make_leaf_vdev(props, argv[0],
is_log)) == NULL)
- return (NULL);
+ goto spec_out;
+
if (is_log)
nlogs++;
argc--;
@@ -1604,13 +1606,13 @@ construct_spec(nvlist_t *props, int argc, char **argv)
(void) fprintf(stderr, gettext("invalid vdev "
"specification: at least one toplevel vdev must be "
"specified\n"));
- return (NULL);
+ goto spec_out;
}
if (seen_logs && nlogs == 0) {
(void) fprintf(stderr, gettext("invalid vdev specification: "
"log requires at least 1 device\n"));
- return (NULL);
+ goto spec_out;
}
/*
@@ -1628,16 +1630,16 @@ construct_spec(nvlist_t *props, int argc, char **argv)
verify(nvlist_add_nvlist_array(nvroot, ZPOOL_CONFIG_L2CACHE,
l2cache, nl2cache) == 0);
+spec_out:
for (t = 0; t < toplevels; t++)
nvlist_free(top[t]);
for (t = 0; t < nspares; t++)
nvlist_free(spares[t]);
for (t = 0; t < nl2cache; t++)
nvlist_free(l2cache[t]);
- if (spares)
- free(spares);
- if (l2cache)
- free(l2cache);
+
+ free(spares);
+ free(l2cache);
free(top);
return (nvroot);