In the Linux kernel, the following vulnerability has been resolved:
f2fs: fix to do sanity check on ino and xnid
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/hungtasktimeoutsecs" disables this message. task:syz-executor140 state:D stack:24016 pid:5308 tgid:5308 ppid:5306 taskflags:0x400140 flags:0x00000006 Call Trace: <TASK> contextswitch kernel/sched/core.c:5378 [inline] _schedule+0x190e/0x4c90 kernel/sched/core.c:6765 _scheduleloop kernel/sched/core.c:6842 [inline] schedule+0x14b/0x320 kernel/sched/core.c:6857 ioschedule+0x8d/0x110 kernel/sched/core.c:7690 foliowaitbitcommon+0x839/0xee0 mm/filemap.c:1317 _foliolock mm/filemap.c:1664 [inline] foliolock include/linux/pagemap.h:1163 [inline] _filemapgetfolio+0x147/0xb40 mm/filemap.c:1917 pagecachegetpage+0x2c/0x130 mm/folio-compat.c:87 findgetpageflags include/linux/pagemap.h:842 [inline] f2fsgrabcachepage+0x2b/0x320 fs/f2fs/f2fs.h:2776 _getnodepage+0x131/0x11b0 fs/f2fs/node.c:1463 readxattrblock+0xfb/0x190 fs/f2fs/xattr.c:306 lookupallxattrs fs/f2fs/xattr.c:355 [inline] f2fsgetxattr+0x676/0xf70 fs/f2fs/xattr.c:533 _f2fsgetacl+0x52/0x870 fs/f2fs/acl.c:179 f2fsaclcreate fs/f2fs/acl.c:375 [inline] f2fsinitacl+0xd7/0x9b0 fs/f2fs/acl.c:418 f2fsinitinodemetadata+0xa0f/0x1050 fs/f2fs/dir.c:539 f2fsaddinlineentry+0x448/0x860 fs/f2fs/inline.c:666 f2fsadddentry+0xba/0x1e0 fs/f2fs/dir.c:765 f2fsdoaddlink+0x28c/0x3a0 fs/f2fs/dir.c:808 f2fsaddlink fs/f2fs/f2fs.h:3616 [inline] f2fsmknod+0x2e8/0x5b0 fs/f2fs/namei.c:766 vfsmknod+0x36d/0x3b0 fs/namei.c:4191 unixbindbsd net/unix/afunix.c:1286 [inline] unixbind+0x563/0xe30 net/unix/afunix.c:1379 _sysbindsocket net/socket.c:1817 [inline] _sysbind+0x1e4/0x290 net/socket.c:1848 _dosysbind net/socket.c:1853 [inline] _sesysbind net/socket.c:1851 [inline] _x64sysbind+0x7a/0x90 net/socket.c:1851 dosyscallx64 arch/x86/entry/common.c:52 [inline] dosyscall64+0xf3/0x230 arch/x86/entry/common.c:83 entrySYSCALL64after_hwframe+0x77/0x7f
Let's dump and check metadata of corrupted inode, it shows its xattrnid is the same to its iino.
dump.f2fs -i 3 chaseyu.img.raw ixattrnid [0x 3 : 3]
So that, during mknod in the corrupted directory, it tries to get and lock inode page twice, result in deadlock.
In order to fix this, let's add sanity check on ino and xnid.