Fix userspace memory leaks found by Clang Static Analzyer
Recently, I have been making a push to fix things that coverity found. However, I was curious what Clang's static analyzer reported, so I ran it and found things that coverity had missed. * contrib/pam_zfs_key/pam_zfs_key.c: If prop_mountpoint is passed more than once, we leak memory. * module/zfs/zcp_get.c: We leak memory on temporary properties in userspace. * tests/zfs-tests/cmd/draid.c: On error from vdev_draid_rand(), we leak memory if best_map had been allocated by a prior iteration. * tests/zfs-tests/cmd/mkfile.c: Memory used by the loop is not freed before program termination. Arguably, these are all minor issues, but if we ignore them, then they could obscure serious bugs, so we fix them. Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Signed-off-by: Richard Yao <richard.yao@alumni.stonybrook.edu> Closes #13955
This commit is contained in:
parent
5e7a2f4665
commit
f7bda2de97
@ -480,7 +480,8 @@ zfs_key_config_load(pam_handle_t *pamh, zfs_key_config_t *config,
|
||||
} else if (strcmp(argv[c], "nounmount") == 0) {
|
||||
config->unmount_and_unload = 0;
|
||||
} else if (strcmp(argv[c], "prop_mountpoint") == 0) {
|
||||
config->homedir = strdup(entry->pw_dir);
|
||||
if (config->homedir == NULL)
|
||||
config->homedir = strdup(entry->pw_dir);
|
||||
}
|
||||
}
|
||||
return (0);
|
||||
|
@ -472,6 +472,7 @@ get_zap_prop(lua_State *state, dsl_dataset_t *ds, zfs_prop_t zfs_prop)
|
||||
/* Fill in temporary value for prop, if applicable */
|
||||
(void) zfs_get_temporary_prop(ds, zfs_prop, &numval, setpoint);
|
||||
#else
|
||||
kmem_free(strval, ZAP_MAXVALUELEN);
|
||||
return (luaL_error(state,
|
||||
"temporary properties only supported in kernel mode",
|
||||
prop_name));
|
||||
|
@ -720,8 +720,11 @@ eval_maps(uint64_t children, int passes, uint64_t *map_seed,
|
||||
*/
|
||||
error = alloc_new_map(children, MAP_ROWS_DEFAULT,
|
||||
vdev_draid_rand(map_seed), &map);
|
||||
if (error)
|
||||
if (error) {
|
||||
if (best_map != NULL)
|
||||
free_map(best_map);
|
||||
return (error);
|
||||
}
|
||||
|
||||
/*
|
||||
* Consider maps with a lower worst_ratio to be of higher
|
||||
|
@ -276,5 +276,9 @@ main(int argc, char **argv)
|
||||
argv++;
|
||||
argc--;
|
||||
}
|
||||
|
||||
if (buf)
|
||||
free(buf);
|
||||
|
||||
return (errors);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user