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 <igor@dilos.org>
Reviewed-by: Ryan Moeller <ryan@iXsystems.com>
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Matthew Ahrens <mahrens@delphix.com>
Closes #11396
This commit is contained in:
Matthew Ahrens
2020-12-23 09:52:24 -08:00
committed by Brian Behlendorf
parent 40ab927ae8
commit b6722b871b
4 changed files with 16 additions and 3 deletions
+4 -3
View File
@@ -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);
}