Skip to contentSkip to conversation

powerpc/nvram: Fix a memory leak in err path

PATCH Applied xinhui 4 participants 4 messages Dec 9, 2015 – Sep 20, 2016 PowerPC

lore
Share & tools
lore

xinhui

author
#0 lore raw

PATCH 1/1 powerpc/nvram: Fix a memory leak in err path

If kmemdup fails, We need kfree *buff* first then return -ENOMEM. Otherwise there is a memory leak.

---
 arch/powerpc/kernel/nvram_64.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
arch/powerpc/kernel/nvram_64.c +1 -1
index 32e2652..21a278b7 100644
@@ -542,9 +542,9 @@ static ssize_t nvram_pstore_read(u64 *id, enum pstore_type_id *type,
 			time->tv_nsec = 0;
 		}
 		*buf = kmemdup(buff + hdr_size, length, GFP_KERNEL);
+		kfree(buff);
 		if (*buf == NULL)
 			return -ENOMEM;
-		kfree(buff);
 
 		if (err_type == ERR_TYPE_KERNEL_PANIC_GZ)
 			*compressed = true;
Signature · 1 line
2.5.0
Reviewed-by on v1 1/1
#1 lore raw
Quoted 5 lines · xinhui

If kmemdup fails, We need kfree *buff* first then return -ENOMEM. Otherwise there is a memory leak.

Quoted 20 lines
---
 arch/powerpc/kernel/nvram_64.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
arch/powerpc/kernel/nvram_64.c +1 -1
index 32e2652..21a278b7 100644
@@ -542,9 +542,9 @@ static ssize_t nvram_pstore_read(u64 *id, enum pstore_type_id *type,
 			time->tv_nsec = 0;
 		}
 		*buf = kmemdup(buff + hdr_size, length, GFP_KERNEL);
+		kfree(buff);
 		if (*buf == NULL)
 			return -ENOMEM;
-		kfree(buff);
 
 		if (err_type == ERR_TYPE_KERNEL_PANIC_GZ)
 			*compressed = true;
#2 lore raw
Quoted 9 lines · Nathan Fontenot
Quoted 5 lines · xinhui

If kmemdup fails, We need kfree *buff* first then return -ENOMEM. Otherwise there is a memory leak.

Hi Nathan,
thank you for doing that :)

thanks
xinhui

Quoted 20 lines
Quoted 20 lines
---
  arch/powerpc/kernel/nvram_64.c | 2 +-
  1 file changed, 1 insertion(+), 1 deletion(-)
arch/powerpc/kernel/nvram_64.c +1 -1
index 32e2652..21a278b7 100644
@@ -542,9 +542,9 @@ static ssize_t nvram_pstore_read(u64 *id, enum pstore_type_id *type,
  			time->tv_nsec = 0;
  		}
  		*buf = kmemdup(buff + hdr_size, length, GFP_KERNEL);
+		kfree(buff);
  		if (*buf == NULL)
  			return -ENOMEM;
-		kfree(buff);
 
  		if (err_type == ERR_TYPE_KERNEL_PANIC_GZ)
  			*compressed = true;