diff --git a/cmd/zdb/zdb.c b/cmd/zdb/zdb.c index a17793c2d9..aa8b67a872 100644 --- a/cmd/zdb/zdb.c +++ b/cmd/zdb/zdb.c @@ -1137,6 +1137,8 @@ dump_uint64(objset_t *os, uint64_t object, void *data, size_t size) } if (size == 0) { + if (data == NULL) + kmem_free(arr, oursize); (void) printf("\t\t[]\n"); return; } @@ -7062,8 +7064,11 @@ import_checkpointed_state(char *target, nvlist_t *cfg, char **new_path) freecfg = B_TRUE; } - if (asprintf(&bogus_name, "%s%s", poolname, BOGUS_SUFFIX) == -1) + if (asprintf(&bogus_name, "%s%s", poolname, BOGUS_SUFFIX) == -1) { + if (target != poolname) + free(poolname); return (NULL); + } fnvlist_add_string(cfg, ZPOOL_CONFIG_POOL_NAME, bogus_name); error = spa_import(bogus_name, cfg, NULL, @@ -7078,6 +7083,7 @@ import_checkpointed_state(char *target, nvlist_t *cfg, char **new_path) if (new_path != NULL && path_start != NULL) { if (asprintf(new_path, "%s%s", bogus_name, path_start) == -1) { + free(bogus_name); if (path_start != NULL) free(poolname); return (NULL); @@ -8198,8 +8204,7 @@ zdb_read_block(char *thing, spa_t *spa) vd = zdb_vdev_lookup(spa->spa_root_vdev, vdev); if (vd == NULL) { (void) printf("***Invalid vdev: %s\n", vdev); - free(dup); - return; + goto done; } else { if (vd->vdev_path) (void) fprintf(stderr, "Found vdev: %s\n", diff --git a/cmd/zfs/zfs_main.c b/cmd/zfs/zfs_main.c index 008f1bea0e..6a1e37a2e3 100644 --- a/cmd/zfs/zfs_main.c +++ b/cmd/zfs/zfs_main.c @@ -7395,8 +7395,11 @@ unshare_unmount(int op, int argc, char **argv) ((tree = uu_avl_create(pool, NULL, UU_DEFAULT)) == NULL)) nomem(); - if ((mnttab = fopen(MNTTAB, "re")) == NULL) + if ((mnttab = fopen(MNTTAB, "re")) == NULL) { + uu_avl_destroy(tree); + uu_avl_pool_destroy(pool); return (ENOENT); + } while (getmntent(mnttab, &entry) == 0) { diff --git a/cmd/zhack.c b/cmd/zhack.c index 75d9c93b36..8797a53e47 100644 --- a/cmd/zhack.c +++ b/cmd/zhack.c @@ -295,6 +295,8 @@ zhack_do_feature_enable(int argc, char **argv) feature.fi_flags |= ZFEATURE_FLAG_READONLY_COMPAT; break; case 'd': + if (desc != NULL) + free(desc); desc = strdup(optarg); break; default: diff --git a/cmd/zpool/zpool_main.c b/cmd/zpool/zpool_main.c index f412c82f98..39ea615f63 100644 --- a/cmd/zpool/zpool_main.c +++ b/cmd/zpool/zpool_main.c @@ -1196,6 +1196,7 @@ zpool_do_remove(int argc, char **argv) return (1); if (stop && noop) { + zpool_close(zhp); (void) fprintf(stderr, gettext("stop request ignored\n")); return (0); } diff --git a/lib/libzfs/libzfs_dataset.c b/lib/libzfs/libzfs_dataset.c index 047a254882..29798af037 100644 --- a/lib/libzfs/libzfs_dataset.c +++ b/lib/libzfs/libzfs_dataset.c @@ -2007,6 +2007,7 @@ zfs_prop_inherit(zfs_handle_t *zhp, const char *propname, boolean_t received) goto error; if ((ret = zfs_ioctl(zhp->zfs_hdl, ZFS_IOC_INHERIT_PROP, &zc)) != 0) { + changelist_free(cl); return (zfs_standard_error(hdl, errno, errbuf)); } else { diff --git a/lib/libzutil/os/linux/zutil_device_path_os.c b/lib/libzutil/os/linux/zutil_device_path_os.c index 9f4c74f50f..05dbb39954 100644 --- a/lib/libzutil/os/linux/zutil_device_path_os.c +++ b/lib/libzutil/os/linux/zutil_device_path_os.c @@ -344,6 +344,8 @@ zfs_get_enclosure_sysfs_path(const char *dev_name) if (strstr(ep->d_name, "enclosure_device") == NULL) continue; + if (tmp2 != NULL) + free(tmp2); if (asprintf(&tmp2, "%s/%s", tmp1, ep->d_name) == -1) { tmp2 = NULL; break; @@ -372,14 +374,13 @@ zfs_get_enclosure_sysfs_path(const char *dev_name) if (tmp3 == NULL) break; + if (path != NULL) + free(path); if (asprintf(&path, "/sys/class/%s", tmp3) == -1) { /* If asprintf() fails, 'path' is undefined */ path = NULL; break; } - - if (path == NULL) - break; } end: diff --git a/tests/zfs-tests/cmd/btree_test.c b/tests/zfs-tests/cmd/btree_test.c index aaad4e47e4..456a36f315 100644 --- a/tests/zfs-tests/cmd/btree_test.c +++ b/tests/zfs-tests/cmd/btree_test.c @@ -233,13 +233,13 @@ drain_tree(zfs_btree_t *bt, char *why) void *ret; u_longlong_t randval = random(); - node = malloc(sizeof (int_node_t)); if ((p = (uint64_t *)zfs_btree_find(bt, &randval, &bt_idx)) != NULL) { continue; } zfs_btree_add_idx(bt, &randval, &bt_idx); + node = malloc(sizeof (int_node_t)); node->data = randval; if ((ret = avl_find(&avl, node, &avl_idx)) != NULL) { snprintf(why, BUFSIZE, "Found in avl: %llu\n", randval); diff --git a/tests/zfs-tests/cmd/draid.c b/tests/zfs-tests/cmd/draid.c index 831039288a..869ca902d0 100644 --- a/tests/zfs-tests/cmd/draid.c +++ b/tests/zfs-tests/cmd/draid.c @@ -849,6 +849,7 @@ restart: if (rc < 0) { printf("Unable to read /dev/urandom: %s\n:", strerror(errno)); + close(fd); return (1); } bytes_read += rc;