
Hi Baidu,
Check the return value when we do malloc.
Signed-off-by: Baidu Liu liucai.lfn@gmail.com
fs/jffs2/jffs2_1pass.c | 12 ++++++++++-- fs/jffs2/jffs2_nand_1pass.c | 5 ++++- 2 files changed, 14 insertions(+), 3 deletions(-)
diff --git a/fs/jffs2/jffs2_1pass.c b/fs/jffs2/jffs2_1pass.c index be6ac78..b3d94af 100644 --- a/fs/jffs2/jffs2_1pass.c +++ b/fs/jffs2/jffs2_1pass.c @@ -662,7 +662,8 @@ jffs2_free_cache(struct part_info *part) pL = (struct b_lists *)part->jffs2_priv; free_nodes(&pL->frag); free_nodes(&pL->dir);
free(pL->readbuf);
if(pL->readbuf)
free(pL); }free(pL->readbuf);
}
This looks ok.
@@ -1470,9 +1471,16 @@ jffs2_1pass_build_lists(struct part_info * part) /* lcd_off(); */
/* if we are building a list we need to refresh the cache. */
- jffs_init_1pass_list(part);
- if(! jffs_init_1pass_list(part))
return 0;
This is strange. We now check for an error of jffs2_init_1pass_list, which currently always returns 0, so let's see where you change that. Ah, you don't (it's in line 671 in this file). It's only in jffs2_nand_1pass that you do a change, but even there we have a problem:
diff --git a/fs/jffs2/jffs2_nand_1pass.c b/fs/jffs2/jffs2_nand_1pass.c index 9bad690..885fa3c 100644 --- a/fs/jffs2/jffs2_nand_1pass.c +++ b/fs/jffs2/jffs2_nand_1pass.c @@ -251,6 +251,7 @@ jffs_init_1pass_list(struct part_info *part) pL->dir.listCompare = compare_dirents; pL->frag.listCompare = compare_inodes; #endif
return 1;
When malloc fails, we get no error output.
} return 0; } @@ -806,7 +807,9 @@ jffs2_1pass_build_lists(struct part_info * part) nand = nand_info + id->num;
/* if we are building a list we need to refresh the cache. */
- jffs_init_1pass_list(part);
- if(! jffs_init_1pass_list(part))
return 0;
And the caller fails also, so the user in this case will see no error message and no output. Not good.
Cheers Detlev