
1/ We should calculate the buf_len before we call get_fl_mem().
Signed-off-by: Baidu Liu liucai.lfn@gmail.com --- fs/jffs2/jffs2_1pass.c | 12 +++++++----- 1 files changed, 7 insertions(+), 5 deletions(-)
diff --git a/fs/jffs2/jffs2_1pass.c b/fs/jffs2/jffs2_1pass.c index 8eb77b1..be6ac78 100644 --- a/fs/jffs2/jffs2_1pass.c +++ b/fs/jffs2/jffs2_1pass.c @@ -1643,6 +1643,8 @@ jffs2_1pass_build_lists(struct part_info * part) case JFFS2_NODETYPE_INODE: if (buf_ofs + buf_len < ofs + sizeof(struct jffs2_raw_inode)) { + buf_len = min_t(uint32_t, buf_size, sector_ofs + + part->sector_size - ofs); get_fl_mem((u32)part->offset + ofs, buf_len, buf); buf_ofs = ofs; @@ -1659,11 +1661,11 @@ jffs2_1pass_build_lists(struct part_info * part) } break; case JFFS2_NODETYPE_DIRENT: - if (buf_ofs + buf_len < ofs + sizeof(struct - jffs2_raw_dirent) + - ((struct - jffs2_raw_dirent *) - node)->nsize) { + if (buf_ofs + buf_len < ofs + + sizeof(struct jffs2_raw_dirent) + + ((struct jffs2_raw_dirent *)node)->nsize) { + buf_len = min_t(uint32_t, buf_size, sector_ofs + + part->sector_size - ofs); get_fl_mem((u32)part->offset + ofs, buf_len, buf); buf_ofs = ofs;