Commit a6550e57 authored by Jesper Juhl's avatar Jesper Juhl Committed by David Woodhouse

mtd: fix memory leak in block2mtd_setup()

There's a mem leak in drivers/mtd/devices/block2mtd.c::block2mtd_setup()

We can leak 'name' allocated with kmalloc in 'parse_name' if leave via
the 'parse_err' macro since it contains a return but doesn't do any
freeing.

Spotted by coverity checker as bug 615.
Signed-off-by: default avatarJesper Juhl <jesper.juhl@gmail.com>
Signed-off-by: default avatarDavid Woodhouse <dwmw2@infradead.org>
parent 552d9205
...@@ -429,7 +429,8 @@ static inline void kill_final_newline(char *str) ...@@ -429,7 +429,8 @@ static inline void kill_final_newline(char *str)
static int block2mtd_setup(const char *val, struct kernel_param *kp) static int block2mtd_setup(const char *val, struct kernel_param *kp)
{ {
char buf[80+12], *str=buf; /* 80 for device, 12 for erase size */ char buf[80+12]; /* 80 for device, 12 for erase size */
char *str = buf;
char *token[2]; char *token[2];
char *name; char *name;
size_t erase_size = PAGE_SIZE; size_t erase_size = PAGE_SIZE;
...@@ -441,7 +442,7 @@ static int block2mtd_setup(const char *val, struct kernel_param *kp) ...@@ -441,7 +442,7 @@ static int block2mtd_setup(const char *val, struct kernel_param *kp)
strcpy(str, val); strcpy(str, val);
kill_final_newline(str); kill_final_newline(str);
for (i=0; i<2; i++) for (i = 0; i < 2; i++)
token[i] = strsep(&str, ","); token[i] = strsep(&str, ",");
if (str) if (str)
...@@ -460,8 +461,10 @@ static int block2mtd_setup(const char *val, struct kernel_param *kp) ...@@ -460,8 +461,10 @@ static int block2mtd_setup(const char *val, struct kernel_param *kp)
if (token[1]) { if (token[1]) {
ret = parse_num(&erase_size, token[1]); ret = parse_num(&erase_size, token[1]);
if (ret) if (ret) {
kfree(name);
parse_err("illegal erase size"); parse_err("illegal erase size");
}
} }
add_device(name, erase_size); add_device(name, erase_size);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment