mirror of https://github.com/hak5/openwrt.git
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
parent
3b6b892d67
commit
9e84d333b1
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue