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: Jesper Juhl <jesper.juhl@gmail.com> Signed-off-by: David Woodhouse <dwmw2@infradead.org>
This commit is contained in:
committed by
David Woodhouse
parent
552d920518
commit
a6550e57f9
@@ -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)
|
|||||||
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,9 +461,11 @@ 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);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user