Revert "f2fs: fix to do sanity check on extent cache correctly"
syzbot reports a f2fs bug as below: UBSAN: array-index-out-of-bounds in fs/f2fs/f2fs.h:3275:19 index 1409 is out of range for type '__le32[923]' (aka 'unsigned int[923]') Call Trace: __dump_stack lib/dump_stack.c:88 [inline] dump_stack_lvl+0x1e7/0x2d0 lib/dump_stack.c:106 ubsan_epilogue lib/ubsan.c:217 [inline] __ubsan_handle_out_of_bounds+0x11c/0x150 lib/ubsan.c:348 inline_data_addr fs/f2fs/f2fs.h:3275 [inline] __recover_inline_status fs/f2fs/inode.c:113 [inline] do_read_inode fs/f2fs/inode.c:480 [inline] f2fs_iget+0x4730/0x48b0 fs/f2fs/inode.c:604 f2fs_fill_super+0x640e/0x80c0 fs/f2fs/super.c:4601 mount_bdev+0x276/0x3b0 fs/super.c:1391 legacy_get_tree+0xef/0x190 fs/fs_context.c:611 vfs_get_tree+0x8c/0x270 fs/super.c:1519 do_new_mount+0x28f/0xae0 fs/namespace.c:3335 do_mount fs/namespace.c:3675 [inline] __do_sys_mount fs/namespace.c:3884 [inline] __se_sys_mount+0x2d9/0x3c0 fs/namespace.c:3861 do_syscall_x64 arch/x86/entry/common.c:50 [inline] do_syscall_64+0x41/0xc0 arch/x86/entry/common.c:80 entry_SYSCALL_64_after_hwframe+0x63/0xcd The issue was bisected to: commitd48a7b3a72
Author: Chao Yu <chao@kernel.org> Date: Mon Jan 9 03:49:20 2023 +0000 f2fs: fix to do sanity check on extent cache correctly The root cause is we applied both v1 and v2 of the patch, v2 is the right fix, so it needs to revert v1 in order to fix reported issue. v1: commitd48a7b3a72
("f2fs: fix to do sanity check on extent cache correctly") https://lore.kernel.org/lkml/20230109034920.492914-1-chao@kernel.org/ v2: commit269d119481
("f2fs: fix to do sanity check on extent cache correctly") https://lore.kernel.org/lkml/20230207134808.1827869-1-chao@kernel.org/ Reported-by: syzbot+601018296973a481f302@syzkaller.appspotmail.com Closes: https://lore.kernel.org/linux-f2fs-devel/000000000000fcf0690600e4d04d@google.com/ Fixes:d48a7b3a72
("f2fs: fix to do sanity check on extent cache correctly") Signed-off-by: Chao Yu <chao@kernel.org> Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
This commit is contained in:
parent
a842a90926
commit
958ccbbf1c
|
@ -475,6 +475,12 @@ static int do_read_inode(struct inode *inode)
|
||||||
fi->i_inline_xattr_size = 0;
|
fi->i_inline_xattr_size = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!sanity_check_inode(inode, node_page)) {
|
||||||
|
f2fs_put_page(node_page, 1);
|
||||||
|
f2fs_handle_error(sbi, ERROR_CORRUPTED_INODE);
|
||||||
|
return -EFSCORRUPTED;
|
||||||
|
}
|
||||||
|
|
||||||
/* check data exist */
|
/* check data exist */
|
||||||
if (f2fs_has_inline_data(inode) && !f2fs_exist_data(inode))
|
if (f2fs_has_inline_data(inode) && !f2fs_exist_data(inode))
|
||||||
__recover_inline_status(inode, node_page);
|
__recover_inline_status(inode, node_page);
|
||||||
|
@ -544,12 +550,6 @@ static int do_read_inode(struct inode *inode)
|
||||||
f2fs_init_read_extent_tree(inode, node_page);
|
f2fs_init_read_extent_tree(inode, node_page);
|
||||||
f2fs_init_age_extent_tree(inode);
|
f2fs_init_age_extent_tree(inode);
|
||||||
|
|
||||||
if (!sanity_check_inode(inode, node_page)) {
|
|
||||||
f2fs_put_page(node_page, 1);
|
|
||||||
f2fs_handle_error(sbi, ERROR_CORRUPTED_INODE);
|
|
||||||
return -EFSCORRUPTED;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!sanity_check_extent_cache(inode)) {
|
if (!sanity_check_extent_cache(inode)) {
|
||||||
f2fs_put_page(node_page, 1);
|
f2fs_put_page(node_page, 1);
|
||||||
f2fs_handle_error(sbi, ERROR_CORRUPTED_INODE);
|
f2fs_handle_error(sbi, ERROR_CORRUPTED_INODE);
|
||||||
|
|
Loading…
Reference in New Issue