[source] nvram: fix memory leak

LEDE Commits lede-commits at lists.infradead.org
Thu Dec 14 09:45:02 PST 2017


jow pushed a commit to source.git, branch lede-17.01:
https://git.lede-project.org/9e84d333b19abdfe5effd276421217a64dd98078

commit 9e84d333b19abdfe5effd276421217a64dd98078
Author: BangLang Huang <banglang.huang at foxmail.com>
AuthorDate: Fri Feb 24 10:16:17 2017 +0800

    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 at foxmail.com>
    (cherry picked from commit 1948d8e08c72106a01b359a30217cf92657cc79d)
---
 package/utils/nvram/src/cli.c   | 10 +++++++---
 package/utils/nvram/src/nvram.c |  3 +++
 2 files changed, 10 insertions(+), 3 deletions(-)

diff --git a/package/utils/nvram/src/cli.c b/package/utils/nvram/src/cli.c
index 488d641..4f9c778 100644
--- a/package/utils/nvram/src/cli.c
+++ b/package/utils/nvram/src/cli.c
@@ -27,13 +27,17 @@
 
 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;
 }
diff --git a/package/utils/nvram/src/nvram.c b/package/utils/nvram/src/nvram.c
index 0e42943..ca89392 100644
--- a/package/utils/nvram/src/nvram.c
+++ b/package/utils/nvram/src/nvram.c
@@ -380,7 +380,9 @@ nvram_handle_t * nvram_open(const char *file, int rdonly)
 
 			if( offset < 0 )
 			{
+				munmap(mmap_area, nvram_part_size);
 				free(mtd);
+				close(fd);
 				return 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);
+	close(fd);
 	return NULL;
 }
 



More information about the lede-commits mailing list