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. * 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); return (0);
}
if (state == POOL_STATE_ACTIVE || if (state == POOL_STATE_ACTIVE ||
state == POOL_STATE_SPARE || !force) { state == POOL_STATE_SPARE || !force) {
@ -583,8 +586,10 @@ is_spare(nvlist_t *config, const char *path)
free(name); free(name);
(void) close(fd); (void) close(fd);
if (config == NULL) if (config == NULL) {
nvlist_free(label);
return (B_TRUE); return (B_TRUE);
}
verify(nvlist_lookup_uint64(label, ZPOOL_CONFIG_GUID, &guid) == 0); verify(nvlist_lookup_uint64(label, ZPOOL_CONFIG_GUID, &guid) == 0);
nvlist_free(label); nvlist_free(label);