public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH] f2fs: fix to do sanity check on ino and xnid
@ 2025-03-24  5:33 Chao Yu
  2025-04-10  4:10 ` [f2fs-dev] " patchwork-bot+f2fs
  0 siblings, 1 reply; 2+ messages in thread
From: Chao Yu @ 2025-03-24  5:33 UTC (permalink / raw)
  To: jaegeuk
  Cc: linux-f2fs-devel, linux-kernel, Chao Yu, stable,
	syzbot+cc448dcdc7ae0b4e4ffa

syzbot reported a f2fs bug as below:

INFO: task syz-executor140:5308 blocked for more than 143 seconds.
      Not tainted 6.14.0-rc7-syzkaller-00069-g81e4f8d68c66 #0
"echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
task:syz-executor140 state:D stack:24016 pid:5308  tgid:5308  ppid:5306   task_flags:0x400140 flags:0x00000006
Call Trace:
 <TASK>
 context_switch kernel/sched/core.c:5378 [inline]
 __schedule+0x190e/0x4c90 kernel/sched/core.c:6765
 __schedule_loop kernel/sched/core.c:6842 [inline]
 schedule+0x14b/0x320 kernel/sched/core.c:6857
 io_schedule+0x8d/0x110 kernel/sched/core.c:7690
 folio_wait_bit_common+0x839/0xee0 mm/filemap.c:1317
 __folio_lock mm/filemap.c:1664 [inline]
 folio_lock include/linux/pagemap.h:1163 [inline]
 __filemap_get_folio+0x147/0xb40 mm/filemap.c:1917
 pagecache_get_page+0x2c/0x130 mm/folio-compat.c:87
 find_get_page_flags include/linux/pagemap.h:842 [inline]
 f2fs_grab_cache_page+0x2b/0x320 fs/f2fs/f2fs.h:2776
 __get_node_page+0x131/0x11b0 fs/f2fs/node.c:1463
 read_xattr_block+0xfb/0x190 fs/f2fs/xattr.c:306
 lookup_all_xattrs fs/f2fs/xattr.c:355 [inline]
 f2fs_getxattr+0x676/0xf70 fs/f2fs/xattr.c:533
 __f2fs_get_acl+0x52/0x870 fs/f2fs/acl.c:179
 f2fs_acl_create fs/f2fs/acl.c:375 [inline]
 f2fs_init_acl+0xd7/0x9b0 fs/f2fs/acl.c:418
 f2fs_init_inode_metadata+0xa0f/0x1050 fs/f2fs/dir.c:539
 f2fs_add_inline_entry+0x448/0x860 fs/f2fs/inline.c:666
 f2fs_add_dentry+0xba/0x1e0 fs/f2fs/dir.c:765
 f2fs_do_add_link+0x28c/0x3a0 fs/f2fs/dir.c:808
 f2fs_add_link fs/f2fs/f2fs.h:3616 [inline]
 f2fs_mknod+0x2e8/0x5b0 fs/f2fs/namei.c:766
 vfs_mknod+0x36d/0x3b0 fs/namei.c:4191
 unix_bind_bsd net/unix/af_unix.c:1286 [inline]
 unix_bind+0x563/0xe30 net/unix/af_unix.c:1379
 __sys_bind_socket net/socket.c:1817 [inline]
 __sys_bind+0x1e4/0x290 net/socket.c:1848
 __do_sys_bind net/socket.c:1853 [inline]
 __se_sys_bind net/socket.c:1851 [inline]
 __x64_sys_bind+0x7a/0x90 net/socket.c:1851
 do_syscall_x64 arch/x86/entry/common.c:52 [inline]
 do_syscall_64+0xf3/0x230 arch/x86/entry/common.c:83
 entry_SYSCALL_64_after_hwframe+0x77/0x7f

Let's dump and check metadata of corrupted inode, it shows its xattr_nid
is the same to its i_ino.

dump.f2fs -i 3 chaseyu.img.raw
i_xattr_nid                             [0x       3 : 3]

So that, during mknod in the corrupted directory, it tries to get and
lock inode page twice, result in deadlock.

- f2fs_mknod
 - f2fs_add_inline_entry
  - f2fs_get_inode_page --- lock dir's inode page
   - f2fs_init_acl
    - f2fs_acl_create(dir,..)
     - __f2fs_get_acl
      - f2fs_getxattr
       - lookup_all_xattrs
        - __get_node_page --- try to lock dir's inode page

In order to fix this, let's add sanity check on ino and xnid.

Cc: stable@vger.kernel.org
Reported-by: syzbot+cc448dcdc7ae0b4e4ffa@syzkaller.appspotmail.com
Closes: https://lore.kernel.org/linux-f2fs-devel/67e06150.050a0220.21942d.0005.GAE@google.com
Signed-off-by: Chao Yu <chao@kernel.org>
---
 fs/f2fs/inode.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/fs/f2fs/inode.c b/fs/f2fs/inode.c
index 83f862578fc8..5c8634eaef7b 100644
--- a/fs/f2fs/inode.c
+++ b/fs/f2fs/inode.c
@@ -286,6 +286,12 @@ static bool sanity_check_inode(struct inode *inode, struct page *node_page)
 		return false;
 	}
 
+	if (ino_of_node(node_page) == fi->i_xattr_nid) {
+		f2fs_warn(sbi, "%s: corrupted inode i_ino=%lx, xnid=%x, run fsck to fix.",
+			  __func__, inode->i_ino, fi->i_xattr_nid);
+		return false;
+	}
+
 	if (f2fs_has_extra_attr(inode)) {
 		if (!f2fs_sb_has_extra_attr(sbi)) {
 			f2fs_warn(sbi, "%s: inode (ino=%lx) is with extra_attr, but extra_attr feature is off",
-- 
2.48.1


^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [f2fs-dev] [PATCH] f2fs: fix to do sanity check on ino and xnid
  2025-03-24  5:33 [PATCH] f2fs: fix to do sanity check on ino and xnid Chao Yu
@ 2025-04-10  4:10 ` patchwork-bot+f2fs
  0 siblings, 0 replies; 2+ messages in thread
From: patchwork-bot+f2fs @ 2025-04-10  4:10 UTC (permalink / raw)
  To: Chao Yu
  Cc: jaegeuk, syzbot+cc448dcdc7ae0b4e4ffa, linux-kernel, stable,
	linux-f2fs-devel

Hello:

This patch was applied to jaegeuk/f2fs.git (dev)
by Jaegeuk Kim <jaegeuk@kernel.org>:

On Mon, 24 Mar 2025 13:33:39 +0800 you wrote:
> syzbot reported a f2fs bug as below:
> 
> INFO: task syz-executor140:5308 blocked for more than 143 seconds.
>       Not tainted 6.14.0-rc7-syzkaller-00069-g81e4f8d68c66 #0
> "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
> task:syz-executor140 state:D stack:24016 pid:5308  tgid:5308  ppid:5306   task_flags:0x400140 flags:0x00000006
> Call Trace:
>  <TASK>
>  context_switch kernel/sched/core.c:5378 [inline]
>  __schedule+0x190e/0x4c90 kernel/sched/core.c:6765
>  __schedule_loop kernel/sched/core.c:6842 [inline]
>  schedule+0x14b/0x320 kernel/sched/core.c:6857
>  io_schedule+0x8d/0x110 kernel/sched/core.c:7690
>  folio_wait_bit_common+0x839/0xee0 mm/filemap.c:1317
>  __folio_lock mm/filemap.c:1664 [inline]
>  folio_lock include/linux/pagemap.h:1163 [inline]
>  __filemap_get_folio+0x147/0xb40 mm/filemap.c:1917
>  pagecache_get_page+0x2c/0x130 mm/folio-compat.c:87
>  find_get_page_flags include/linux/pagemap.h:842 [inline]
>  f2fs_grab_cache_page+0x2b/0x320 fs/f2fs/f2fs.h:2776
>  __get_node_page+0x131/0x11b0 fs/f2fs/node.c:1463
>  read_xattr_block+0xfb/0x190 fs/f2fs/xattr.c:306
>  lookup_all_xattrs fs/f2fs/xattr.c:355 [inline]
>  f2fs_getxattr+0x676/0xf70 fs/f2fs/xattr.c:533
>  __f2fs_get_acl+0x52/0x870 fs/f2fs/acl.c:179
>  f2fs_acl_create fs/f2fs/acl.c:375 [inline]
>  f2fs_init_acl+0xd7/0x9b0 fs/f2fs/acl.c:418
>  f2fs_init_inode_metadata+0xa0f/0x1050 fs/f2fs/dir.c:539
>  f2fs_add_inline_entry+0x448/0x860 fs/f2fs/inline.c:666
>  f2fs_add_dentry+0xba/0x1e0 fs/f2fs/dir.c:765
>  f2fs_do_add_link+0x28c/0x3a0 fs/f2fs/dir.c:808
>  f2fs_add_link fs/f2fs/f2fs.h:3616 [inline]
>  f2fs_mknod+0x2e8/0x5b0 fs/f2fs/namei.c:766
>  vfs_mknod+0x36d/0x3b0 fs/namei.c:4191
>  unix_bind_bsd net/unix/af_unix.c:1286 [inline]
>  unix_bind+0x563/0xe30 net/unix/af_unix.c:1379
>  __sys_bind_socket net/socket.c:1817 [inline]
>  __sys_bind+0x1e4/0x290 net/socket.c:1848
>  __do_sys_bind net/socket.c:1853 [inline]
>  __se_sys_bind net/socket.c:1851 [inline]
>  __x64_sys_bind+0x7a/0x90 net/socket.c:1851
>  do_syscall_x64 arch/x86/entry/common.c:52 [inline]
>  do_syscall_64+0xf3/0x230 arch/x86/entry/common.c:83
>  entry_SYSCALL_64_after_hwframe+0x77/0x7f
> 
> [...]

Here is the summary with links:
  - [f2fs-dev] f2fs: fix to do sanity check on ino and xnid
    https://git.kernel.org/jaegeuk/f2fs/c/061cf3a84bde

You are awesome, thank you!
-- 
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html



^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2025-04-10  4:10 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-03-24  5:33 [PATCH] f2fs: fix to do sanity check on ino and xnid Chao Yu
2025-04-10  4:10 ` [f2fs-dev] " patchwork-bot+f2fs

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox