From 75c62019f3938e7bc81becb4fb2d5b5eb523e79a Mon Sep 17 00:00:00 2001 From: Joao Carlos Mendes Luis Date: Mon, 13 Apr 2020 14:54:41 -0300 Subject: [PATCH] Fix allocation errors, detected using ASAN MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The test for VDEV_TYPE_INDIRECT is done after a memory allocation, and could return from function without freeing it. Since we don't need that allocation yet, just postpone it. Add a missing free() when buffer is no longer needed. Reviewed-by: Matthew Ahrens Reviewed-by: Brian Behlendorf Signed-off-by: João Carlos Mendes Luís Closes #10193 --- cmd/zpool/zpool_main.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/cmd/zpool/zpool_main.c b/cmd/zpool/zpool_main.c index b5f2f9b023..e8e94cd94e 100644 --- a/cmd/zpool/zpool_main.c +++ b/cmd/zpool/zpool_main.c @@ -4395,11 +4395,11 @@ print_vdev_stats(zpool_handle_t *zhp, const char *name, nvlist_t *oldnv, uint64_t tdelta; double scale; - calcvs = safe_malloc(sizeof (*calcvs)); - if (strcmp(name, VDEV_TYPE_INDIRECT) == 0) return (ret); + calcvs = safe_malloc(sizeof (*calcvs)); + if (oldnv != NULL) { verify(nvlist_lookup_uint64_array(oldnv, ZPOOL_CONFIG_VDEV_STATS, (uint64_t **)&oldvs, &c) == 0); @@ -7387,6 +7387,7 @@ print_removal_status(zpool_handle_t *zhp, pool_removal_stat_t *prs) ", (copy is slow, no estimated time)\n")); } } + free(vdev_name); if (prs->prs_mapping_memory > 0) { char mem_buf[7];