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;
|
uint64_t tdelta;
|
||||||
double scale;
|
double scale;
|
||||||
|
|
||||||
calcvs = safe_malloc(sizeof (*calcvs));
|
|
||||||
|
|
||||||
if (strcmp(name, VDEV_TYPE_INDIRECT) == 0)
|
if (strcmp(name, VDEV_TYPE_INDIRECT) == 0)
|
||||||
return (ret);
|
return (ret);
|
||||||
|
|
||||||
|
calcvs = safe_malloc(sizeof (*calcvs));
|
||||||
|
|
||||||
if (oldnv != NULL) {
|
if (oldnv != NULL) {
|
||||||
verify(nvlist_lookup_uint64_array(oldnv,
|
verify(nvlist_lookup_uint64_array(oldnv,
|
||||||
ZPOOL_CONFIG_VDEV_STATS, (uint64_t **)&oldvs, &c) == 0);
|
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"));
|
", (copy is slow, no estimated time)\n"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
free(vdev_name);
|
||||||
|
|
||||||
if (prs->prs_mapping_memory > 0) {
|
if (prs->prs_mapping_memory > 0) {
|
||||||
char mem_buf[7];
|
char mem_buf[7];
|
||||||
|
|
Loading…
Reference in New Issue