]> git.proxmox.com Git - mirror_zfs.git/commitdiff
Fix allocation errors, detected using ASAN
authorJoao Carlos Mendes Luis <dioni21@users.noreply.github.com>
Mon, 13 Apr 2020 17:54:41 +0000 (14:54 -0300)
committerGitHub <noreply@github.com>
Mon, 13 Apr 2020 17:54:41 +0000 (10:54 -0700)
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 <mahrens@delphix.com>
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: João Carlos Mendes Luís <jonny@jonny.eng.br>
Closes #10193

cmd/zpool/zpool_main.c

index b5f2f9b023000c5c5f3273dd6df60800526d2c3d..e8e94cd94ebb46e3130a8a54aa9290ad146936c3 100644 (file)
@@ -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];