Patch "Revert "f2fs: fix to do sanity check on extent cache correctly"" has been added to the 6.4-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    Revert "f2fs: fix to do sanity check on extent cache correctly"

to the 6.4-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     revert-f2fs-fix-to-do-sanity-check-on-extent-cache-c.patch
and it can be found in the queue-6.4 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit 892b6436bddfe686241908dfc62aab426857b9bf
Author: Chao Yu <chao@xxxxxxxxxx>
Date:   Thu Jul 20 19:29:53 2023 +0800

    Revert "f2fs: fix to do sanity check on extent cache correctly"
    
    [ Upstream commit 958ccbbf1ce716d77c7cfa79ace50a421c1eed73 ]
    
    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:
    
    commit d48a7b3a72f121655d95b5157c32c7d555e44c05
    Author: Chao Yu <chao@xxxxxxxxxx>
    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:
    commit d48a7b3a72f1 ("f2fs: fix to do sanity check on extent cache correctly")
    https://lore.kernel.org/lkml/20230109034920.492914-1-chao@xxxxxxxxxx/
    
    v2:
    commit 269d11948100 ("f2fs: fix to do sanity check on extent cache correctly")
    https://lore.kernel.org/lkml/20230207134808.1827869-1-chao@xxxxxxxxxx/
    
    Reported-by: syzbot+601018296973a481f302@xxxxxxxxxxxxxxxxxxxxxxxxx
    Closes: https://lore.kernel.org/linux-f2fs-devel/000000000000fcf0690600e4d04d@xxxxxxxxxx/
    Fixes: d48a7b3a72f1 ("f2fs: fix to do sanity check on extent cache correctly")
    Signed-off-by: Chao Yu <chao@xxxxxxxxxx>
    Signed-off-by: Jaegeuk Kim <jaegeuk@xxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/fs/f2fs/inode.c b/fs/f2fs/inode.c
index cf4327ad106c0..a99c151e3bdcf 100644
--- a/fs/f2fs/inode.c
+++ b/fs/f2fs/inode.c
@@ -396,6 +396,12 @@ static int do_read_inode(struct inode *inode)
 		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 */
 	if (f2fs_has_inline_data(inode) && !f2fs_exist_data(inode))
 		__recover_inline_status(inode, node_page);
@@ -465,12 +471,6 @@ static int do_read_inode(struct inode *inode)
 	f2fs_init_read_extent_tree(inode, node_page);
 	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)) {
 		f2fs_put_page(node_page, 1);
 		f2fs_handle_error(sbi, ERROR_CORRUPTED_INODE);



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux