f2fs: Add check for deleted inode
PATCH v2 1/1 f2fs: Add check for deleted inode
The syzbot reproducer mounts a f2fs image, then tries to unlink an existing file. However, the unlinked file already has a link count of 0 when it is read for the first time in do_read_inode().
Add a check to sanity_check_inode() for i_nlink == 0.
---
v2: Correct "Fixes" line
v1: https://lore.kernel.org/all/[email protected]/T/
--- fs/f2fs/inode.c | 6 ++++++ 1 file changed, 6 insertions(+)
fs/f2fs/inode.c +6 -0
@@ -372,6 +372,12 @@ static bool sanity_check_inode(struct inode *inode, struct page *node_page)return false; } +if (inode->i_nlink ==0 ) { +f2fs_warn (sbi,"%s: inode (ino=%lx) has a link count of 0" , + __func__, inode->i_ino); +return false; + } +return true; }
Signature · 1 line
2.43.0
Chao Yu
maintainerQuoted 9 lines · Leo Stone
The syzbot reproducer mounts a f2fs image, then tries to unlink an existing file. However, the unlinked file already has a link count of 0 when it is read for the first time in
do_read_inode().Add a check to
sanity_check_inode()fori_nlink== 0.Reported-by [email protected]Fixes 5d64600d4f33 ("f2fs: avoid bug_on on corrupted inode")
39a53e0ce0df ("f2fs: add superblock and major in-memory structure")? Due to it missed to do sanity check on i_nlink in initialization version of f2fs.
Thanks,
Thanks,
Quoted 25 lines
Signed-off-by Leo Stone <[email protected]>---
v2: Correct "Fixes" line
v1: https://lore.kernel.org/all/[email protected]/T/--- fs/f2fs/inode.c | 6 ++++++ 1 file changed, 6 insertions(+)fs/f2fs/inode.c +6
-0@@ -372,6 +372,12 @@ static bool sanity_check_inode(struct inode *inode, struct page *node_page)return false; } +if (inode->i_nlink ==0 ) { +f2fs_warn (sbi,"%s: inode (ino=%lx) has a link count of 0" , + __func__, inode->i_ino); +return false; + } +return true; }