Fix allocation errors, detected using ASAN
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
This commit is contained in:
parent
791e480c6a
commit
75c62019f3
@ -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];
|
||||
|
Loading…
Reference in New Issue
Block a user