JFFS2: memory leak in jffs2_do_mount_fs()
If jffs2_sum_init() fails, c->blocks is not freed neither in jffs2_do_mount_fs() nor in jffs2_do_fill_super(). Signed-off-by: Dmitry Adamushko <dmitry.adamushko@gmail.com> Signed-off-by: David Woodhouse <dwmw2@infradead.org>
This commit is contained in:
parent
0d36da3b40
commit
cfa72397cf
1 changed files with 13 additions and 9 deletions
|
@ -348,23 +348,27 @@ int jffs2_do_mount_fs(struct jffs2_sb_info *c)
|
||||||
|
|
||||||
ret = jffs2_sum_init(c);
|
ret = jffs2_sum_init(c);
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
goto out_free;
|
||||||
|
|
||||||
if (jffs2_build_filesystem(c)) {
|
if (jffs2_build_filesystem(c)) {
|
||||||
dbg_fsbuild("build_fs failed\n");
|
dbg_fsbuild("build_fs failed\n");
|
||||||
jffs2_free_ino_caches(c);
|
jffs2_free_ino_caches(c);
|
||||||
jffs2_free_raw_node_refs(c);
|
jffs2_free_raw_node_refs(c);
|
||||||
#ifndef __ECOS
|
ret = -EIO;
|
||||||
if (jffs2_blocks_use_vmalloc(c))
|
goto out_free;
|
||||||
vfree(c->blocks);
|
|
||||||
else
|
|
||||||
#endif
|
|
||||||
kfree(c->blocks);
|
|
||||||
|
|
||||||
return -EIO;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
jffs2_calc_trigger_levels(c);
|
jffs2_calc_trigger_levels(c);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
out_free:
|
||||||
|
#ifndef __ECOS
|
||||||
|
if (jffs2_blocks_use_vmalloc(c))
|
||||||
|
vfree(c->blocks);
|
||||||
|
else
|
||||||
|
#endif
|
||||||
|
kfree(c->blocks);
|
||||||
|
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue