diff options
author | Matthew Ahrens <[email protected]> | 2020-12-23 09:52:24 -0800 |
---|---|---|
committer | Brian Behlendorf <[email protected]> | 2020-12-28 10:05:31 -0800 |
commit | b6722b871b141b29adb5ae46455b7d96620fa993 (patch) | |
tree | d367be7860998a93ba96ea3a56c63b7b00c909a6 /lib | |
parent | 40ab927ae817b44fcb7fa043a8073c5f049f9257 (diff) |
nvlist leaked in zpool_find_config()
In `zpool_find_config()`, the `pools` nvlist is leaked. Part of it (a
sub-nvlist) is returned in `*configp`, but the callers also leak that.
Additionally, in `zdb.c:main()`, the `searchdirs` is leaked.
The leaks were detected by ASAN (`configure --enable-asan`).
This commit resolves the leaks.
Reviewed-by: Igor Kozhukhov <[email protected]>
Reviewed-by: Ryan Moeller <[email protected]>
Reviewed-by: Brian Behlendorf <[email protected]>
Signed-off-by: Matthew Ahrens <[email protected]>
Closes #11396
Diffstat (limited to 'lib')
-rw-r--r-- | lib/libzutil/zutil_import.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/lib/libzutil/zutil_import.c b/lib/libzutil/zutil_import.c index b8cdc118b..3a1827294 100644 --- a/lib/libzutil/zutil_import.c +++ b/lib/libzutil/zutil_import.c @@ -1539,7 +1539,7 @@ zpool_find_config(void *hdl, const char *target, nvlist_t **configp, nvlist_t *pools; nvlist_t *match = NULL; nvlist_t *config = NULL; - char *name = NULL, *sepp = NULL; + char *sepp = NULL; char sep = '\0'; int count = 0; char *targetdup = strdup(target); @@ -1563,11 +1563,11 @@ zpool_find_config(void *hdl, const char *target, nvlist_t **configp, /* multiple matches found */ continue; } else { - match = config; - name = nvpair_name(elem); + match = fnvlist_dup(config); } } } + fnvlist_free(pools); } if (count == 0) { @@ -1577,6 +1577,7 @@ zpool_find_config(void *hdl, const char *target, nvlist_t **configp, if (count > 1) { free(targetdup); + fnvlist_free(match); return (EINVAL); } |