Fix memory/fd leak in check_file() and is_spare()

Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: liuhuang <liu.huang@zte.com.cn>
Closes #5085
This commit is contained in:
liuhuang 2016-09-11 04:41:19 +08:00 committed by Brian Behlendorf
parent 89f67518e1
commit bd296705d5

View File

@ -334,8 +334,11 @@ check_file(const char *file, boolean_t force, boolean_t isspare)
/*
* Allow hot spares to be shared between pools.
*/
if (state == POOL_STATE_SPARE && isspare)
if (state == POOL_STATE_SPARE && isspare) {
free(name);
(void) close(fd);
return (0);
}
if (state == POOL_STATE_ACTIVE ||
state == POOL_STATE_SPARE || !force) {
@ -583,8 +586,10 @@ is_spare(nvlist_t *config, const char *path)
free(name);
(void) close(fd);
if (config == NULL)
if (config == NULL) {
nvlist_free(label);
return (B_TRUE);
}
verify(nvlist_lookup_uint64(label, ZPOOL_CONFIG_GUID, &guid) == 0);
nvlist_free(label);