resize.f2fs: fix access out-of memory boundary
PATCH 1/1 resize.f2fs: fix access out-of memory boundary
This fixes out-of memory boundary on nat_bitmap, when resizing small to large partition.
Signed-off-by Jaegeuk Kim <[email protected]>
--- fsck/f2fs.h | 1 + fsck/mount.c | 13 +++++++++---- 2 files changed, 10 insertions(+), 4 deletions(-)
fsck/f2fs.h +1 -0
@@ -50,6 +50,7 @@ struct node_info {struct f2fs_nm_info {block_t nat_blkaddr; +block_t nat_blocks;nid_t max_nid;nid_t init_scan_nid;nid_t next_scan_nid;
fsck/mount.c +9 -4
@@ -998,7 +998,12 @@ void write_nat_bits(struct f2fs_sb_info *sbi, (seg_off <<get_sb (log_blocks_per_seg) <<1 ) + (i & ((1 << get_sb(log_blocks_per_seg)) - 1))); -if (f2fs_test_bit (i, nm_i->nat_bitmap)) +/* +* Should consider new nat_blocks is larger than old +* nm_i->nat_blocks, since nm_i->nat_bitmap is based on +* old one. +*/ +if (i < nm_i->nat_blocks &&f2fs_test_bit (i, nm_i->nat_bitmap)) blkaddr += (1 <<get_sb (log_blocks_per_seg)); ret =dev_read_block (nat_block, blkaddr);
@@ -1037,14 +1042,14 @@ int init_node_manager(struct f2fs_sb_info *sbi)struct f2fs_checkpoint *cp =F2FS_CKPT (sbi);struct f2fs_nm_info *nm_i =NM_I (sbi);unsigned char *version_bitmap; -unsigned int nat_segs, nat_blocks; +unsigned int nat_segs; nm_i->nat_blkaddr =get_sb (nat_blkaddr);/* segment_count_nat includes pair segment so divide to 2. */ nat_segs =get_sb (segment_count_nat) >>1 ; - nat_blocks = nat_segs <<get_sb (log_blocks_per_seg); - nm_i->max_nid =NAT_ENTRY_PER_BLOCK * nat_blocks; + nm_i->nat_blocks = nat_segs <<get_sb (log_blocks_per_seg); + nm_i->max_nid =NAT_ENTRY_PER_BLOCK * nm_i->nat_blocks; nm_i->fcnt =0 ; nm_i->nat_cnt =0 ; nm_i->init_scan_nid =get_cp (next_free_nid);
Signature · 6 lines
2.15.0.531.g2ccb3012c9-goog ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot
Quoted 4 lines · Jaegeuk Kim
This fixes out-of memory boundary on
nat_bitmap, when resizing small to large partition.Signed-off-by Jaegeuk Kim <[email protected]>
Reviewed-by Chao Yu <[email protected]>
Thanks,
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot