nvram: fix memory leak

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 1948d8e08c)
lede-17.01
BangLang Huang 2017-02-24 10:16:17 +08:00 committed by Jo-Philipp Wich
parent 3b6b892d67
commit 9e84d333b1
2 changed files with 10 additions and 3 deletions

View File

@ -27,13 +27,17 @@
static nvram_handle_t * nvram_open_rdonly(void) static nvram_handle_t * nvram_open_rdonly(void)
{ {
const char *file = nvram_find_staging(); char *file = nvram_find_staging();
if( file == NULL ) if( file == NULL )
file = nvram_find_mtd(); file = nvram_find_mtd();
if( file != NULL ) if( file != NULL ) {
return nvram_open(file, NVRAM_RO); nvram_handle_t *h = nvram_open(file, NVRAM_RO);
if( strcmp(file, NVRAM_STAGING) )
free(file);
return h;
}
return NULL; return NULL;
} }

View File

@ -380,7 +380,9 @@ nvram_handle_t * nvram_open(const char *file, int rdonly)
if( offset < 0 ) if( offset < 0 )
{ {
munmap(mmap_area, nvram_part_size);
free(mtd); free(mtd);
close(fd);
return NULL; return NULL;
} }
else if( (h = malloc(sizeof(nvram_handle_t))) != NULL ) else if( (h = malloc(sizeof(nvram_handle_t))) != NULL )
@ -410,6 +412,7 @@ nvram_handle_t * nvram_open(const char *file, int rdonly)
} }
free(mtd); free(mtd);
close(fd);
return NULL; return NULL;
} }