Fix memory leak on nvram_open() and nvram_open_rdonly().
For nvram_open(), the 'fd' should be closed on error, and
mmap_area should be unmap when nvram magic can not be found.
For nvram_open_rdonly(), the 'file' variable should free before
return. Once nvram_find_mtd() return successfully, it will allocate
memory to save mtd device string.
Signed-off-by: BangLang Huang <banglang.huang@foxmail.com>
(cherry picked from commit
1948d8e08c72106a01b359a30217cf92657cc79d)
static nvram_handle_t * nvram_open_rdonly(void)
{
- const char *file = nvram_find_staging();
+ char *file = nvram_find_staging();
if( file == NULL )
file = nvram_find_mtd();
- if( file != NULL )
- return nvram_open(file, NVRAM_RO);
+ if( file != NULL ) {
+ nvram_handle_t *h = nvram_open(file, NVRAM_RO);
+ if( strcmp(file, NVRAM_STAGING) )
+ free(file);
+ return h;
+ }
return NULL;
}
if( offset < 0 )
{
+ munmap(mmap_area, nvram_part_size);
free(mtd);
+ close(fd);
return NULL;
}
else if( (h = malloc(sizeof(nvram_handle_t))) != NULL )
}
free(mtd);
+ close(fd);
return NULL;
}