Fix memory leak in function add_config()
Config of a hot spare or l2cache device will leak memory in function add_config(). At the start of this function, when dealing with a config which belongs to a hot spare not currently in use or a l2cache device the config should be freed. Signed-off-by: liaoyuxiangqin <guo.yong33@zte.com.cn> Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov> Closes #4910
This commit is contained in:
parent
df053d67a9
commit
e24e62a948
|
@ -641,11 +641,14 @@ add_config(libzfs_handle_t *hdl, pool_list_t *pl, const char *path,
|
||||||
&state) == 0 &&
|
&state) == 0 &&
|
||||||
(state == POOL_STATE_SPARE || state == POOL_STATE_L2CACHE) &&
|
(state == POOL_STATE_SPARE || state == POOL_STATE_L2CACHE) &&
|
||||||
nvlist_lookup_uint64(config, ZPOOL_CONFIG_GUID, &vdev_guid) == 0) {
|
nvlist_lookup_uint64(config, ZPOOL_CONFIG_GUID, &vdev_guid) == 0) {
|
||||||
if ((ne = zfs_alloc(hdl, sizeof (name_entry_t))) == NULL)
|
if ((ne = zfs_alloc(hdl, sizeof (name_entry_t))) == NULL) {
|
||||||
|
nvlist_free(config);
|
||||||
return (-1);
|
return (-1);
|
||||||
|
}
|
||||||
|
|
||||||
if ((ne->ne_name = zfs_strdup(hdl, path)) == NULL) {
|
if ((ne->ne_name = zfs_strdup(hdl, path)) == NULL) {
|
||||||
free(ne);
|
free(ne);
|
||||||
|
nvlist_free(config);
|
||||||
return (-1);
|
return (-1);
|
||||||
}
|
}
|
||||||
ne->ne_guid = vdev_guid;
|
ne->ne_guid = vdev_guid;
|
||||||
|
@ -653,6 +656,7 @@ add_config(libzfs_handle_t *hdl, pool_list_t *pl, const char *path,
|
||||||
ne->ne_num_labels = num_labels;
|
ne->ne_num_labels = num_labels;
|
||||||
ne->ne_next = pl->names;
|
ne->ne_next = pl->names;
|
||||||
pl->names = ne;
|
pl->names = ne;
|
||||||
|
nvlist_free(config);
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue