Hi, Dmitry,

I agree w/ you, I've figured out a patch previously, please check it?

https://lore.kernel.org/linux-f2fs-devel/20241216134600.8308-1-c...@kernel.org

On 2024/12/20 21:30, Dmitry Antipov wrote:
Does FI_INLINE_XATTR always assume FI_EXTRA_ATTR? Looking through the code, it's
not quite clear (at a first glance at least). If this is not so, I have a strong
suspicion that FI_INLINE_XATTR-related checks in sanity_check_inode() should be
moved to outer scope (outside of FI_EXTRA_ATTR check), i.e.:

diff --git a/fs/f2fs/inode.c b/fs/f2fs/inode.c
index 282fd320bdb3..3061cf69a7fb 100644
--- a/fs/f2fs/inode.c
+++ b/fs/f2fs/inode.c
@@ -302,15 +302,7 @@ static bool sanity_check_inode(struct inode *inode, struct 
page *node_page)
                                  F2FS_TOTAL_EXTRA_ATTR_SIZE);
                        return false;
                }
-               if (f2fs_sb_has_flexible_inline_xattr(sbi) &&
-                       f2fs_has_inline_xattr(inode) &&
-                       (!fi->i_inline_xattr_size ||
-                       fi->i_inline_xattr_size > MAX_INLINE_XATTR_SIZE)) {
-                       f2fs_warn(sbi, "%s: inode (ino=%lx) has corrupted 
i_inline_xattr_size: %d, max: %lu",
-                                 __func__, inode->i_ino, 
fi->i_inline_xattr_size,
-                                 MAX_INLINE_XATTR_SIZE);
-                       return false;
-               }
+
                if (f2fs_sb_has_compression(sbi) &&
                        fi->i_flags & F2FS_COMPR_FL &&
                        F2FS_FITS_IN_INODE(ri, fi->i_extra_isize,
@@ -320,6 +312,16 @@ static bool sanity_check_inode(struct inode *inode, struct 
page *node_page)
                }
        }

+       if (f2fs_sb_has_flexible_inline_xattr(sbi) &&
+           f2fs_has_inline_xattr(inode) &&
+           (!fi->i_inline_xattr_size ||
+            fi->i_inline_xattr_size > MAX_INLINE_XATTR_SIZE)) {
+               f2fs_warn(sbi, "%s: inode (ino=%lx) has corrupted 
i_inline_xattr_size: %d, max: %lu",
+                         __func__, inode->i_ino, fi->i_inline_xattr_size,
+                         MAX_INLINE_XATTR_SIZE);
+               return false;
+       }
+
        if (!f2fs_sb_has_extra_attr(sbi)) {
                if (f2fs_sb_has_project_quota(sbi)) {
                        f2fs_warn(sbi, "%s: corrupted inode ino=%lx, wrong feature 
flag: %u, run fsck to fix.",

(Looking around https://syzkaller.appspot.com/bug?extid=e4876215632c2d23b481).

Dmitry




_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

Reply via email to