fsck.f2fs: fix stack overflow when reading out nat block
PATCH 1/1 fsck.f2fs: fix stack overflow when reading out nat block
The size of nat_block is less then 4KB, resulting in stack overflow by dev_read.
Signed-off-by Jaegeuk Kim <[email protected]>
--- fsck/mount.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-)
fsck/mount.c +9 -4
@@ -907,7 +907,7 @@ static int f2fs_init_nid_bitmap(struct f2fs_sb_info *sbi)struct curseg_info *curseg =CURSEG_I (sbi,CURSEG_HOT_DATA );struct f2fs_summary_block *sum = curseg->sum_blk;struct f2fs_journal *journal = &sum->journal; -struct f2fs_nat_block nat_block; +struct f2fs_nat_block *nat_block;block_t start_blk;nid_t nid;int i;
@@ -922,18 +922,22 @@ static int f2fs_init_nid_bitmap(struct f2fs_sb_info *sbi)/* arbitrarily set 0 bit */ f2fs_set_bit (0 , nm_i->nid_bitmap); -memset ((void *)&nat_block,0 ,sizeof (struct f2fs_nat_block )); + nat_block =malloc (F2FS_BLKSIZE ); +if (!nat_block) { +free (nm_i->nid_bitmap); +return -ENOMEM ; + }for (nid =0 ; nid < nm_i->max_nid; nid++) {if (!(nid %NAT_ENTRY_PER_BLOCK )) {int ret; start_blk =current_nat_addr (sbi, nid); - ret =dev_read_block ((void *)&nat_block, start_blk); + ret =dev_read_block (nat_block, start_blk);ASSERT (ret >=0 ); } -if (nat_block.entries[nid %NAT_ENTRY_PER_BLOCK ].block_addr) +if (nat_block->entries[nid %NAT_ENTRY_PER_BLOCK ].block_addr)f2fs_set_bit (nid, nm_i->nid_bitmap); }
@@ -945,6 +949,7 @@ static int f2fs_init_nid_bitmap(struct f2fs_sb_info *sbi)if (addr !=NULL_ADDR )f2fs_set_bit (nid, nm_i->nid_bitmap); } +free (nat_block);return 0 ; }
Signature · 6 lines
2.17.0.484.g0c8726318c-goog ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot
Quoted 3 lines · Jaegeuk Kim
The size of
nat_blockis less then 4KB, resulting in stack overflow bydev_read.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