Syzbot test for v3: ocfs2: fix kernel BUG in ocfs2_find_victim_chain

Prithvi Tambewagh posted 1 patch 9 hours ago
fs/ocfs2/suballoc.c | 9 +++++++++
1 file changed, 9 insertions(+)
Syzbot test for v3: ocfs2: fix kernel BUG in ocfs2_find_victim_chain
Posted by Prithvi Tambewagh 9 hours ago
#syz test git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git 939f15e640f193616691d3bcde0089760e75b0d3

Signed-off-by: Prithvi Tambewagh <activprithvi@gmail.com>
---
 fs/ocfs2/suballoc.c | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/fs/ocfs2/suballoc.c b/fs/ocfs2/suballoc.c
index 6ac4dcd54588..6c2c33a26056 100644
--- a/fs/ocfs2/suballoc.c
+++ b/fs/ocfs2/suballoc.c
@@ -1992,6 +1992,15 @@ static int ocfs2_claim_suballoc_bits(struct ocfs2_alloc_context *ac,
 	}
 
 	cl = (struct ocfs2_chain_list *) &fe->id2.i_chain;
+	if (!le16_to_cpu(cl->cl_next_free_rec) ||
+	    le16_to_cpu(cl->cl_next_free_rec) > le16_to_cpu(cl->cl_count)) {
+		status = ocfs2_error(ac->ac_inode->i_sb,
+				     "Chain allocator dinode %llu has invalid next "
+				     "free chain record %u, but only %u total\n",
+				     (unsigned long long)le64_to_cpu(fe->i_blkno),
+				     le16_to_cpu(cl->cl_next_free_rec),
+				     le16_to_cpu(cl->cl_count));
+	}
 
 	victim = ocfs2_find_victim_chain(cl);
 	ac->ac_chain = victim;

base-commit: 939f15e640f193616691d3bcde0089760e75b0d3
-- 
2.34.1
Re: [syzbot] [ocfs2?] kernel BUG in ocfs2_claim_suballoc_bits
Posted by syzbot 8 hours ago
Hello,

syzbot has tested the proposed patch but the reproducer is still triggering an issue:
kernel BUG in ocfs2_claim_suballoc_bits

ocfs2: Mounting device (7,0) on (node local, slot 0) with ordered data mode.
OCFS2: ERROR (device loop0): int ocfs2_claim_suballoc_bits(struct ocfs2_alloc_context *, handle_t *, u32, u32, struct ocfs2_suballoc_result *): Chain allocator dinode 71 has invalid next free chain record 0, but only 0 total
On-disk corruption discovered. Please run fsck.ocfs2 once the filesystem is unmounted.
OCFS2: File system is now read-only.
------------[ cut here ]------------
kernel BUG at fs/ocfs2/suballoc.c:1443!
Oops: invalid opcode: 0000 [#1] SMP KASAN PTI
CPU: 0 UID: 0 PID: 6562 Comm: syz.0.16 Not tainted syzkaller #0 PREEMPT(full) 
Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 10/25/2025
RIP: 0010:ocfs2_find_victim_chain fs/ocfs2/suballoc.c:1443 [inline]
RIP: 0010:ocfs2_claim_suballoc_bits+0x25b9/0x25d0 fs/ocfs2/suballoc.c:2005
Code: 5f fb ff ff e8 08 41 1c fe 90 0f 0b e8 00 41 1c fe 90 0f 0b e8 f8 40 1c fe 90 0f 0b e8 f0 40 1c fe 90 0f 0b e8 e8 40 1c fe 90 <0f> 0b e8 e0 40 1c fe 90 0f 0b 66 66 66 66 2e 0f 1f 84 00 00 00 00
RSP: 0018:ffffc90003496e80 EFLAGS: 00010293
RAX: ffffffff83a40da8 RBX: 0000000000000000 RCX: ffff888025d78000
RDX: 0000000000000000 RSI: 0000000000000000 RDI: 0000000000000000
RBP: ffffc90003497110 R08: ffff888072d4c103 R09: 1ffff1100e5a9820
R10: dffffc0000000000 R11: ffffed100e5a9821 R12: ffff88806f212ec4
R13: dffffc0000000000 R14: 0000000000000000 R15: ffff888072a78000
FS:  00007f6946c846c0(0000) GS:ffff888125c86000(0000) knlGS:0000000000000000
CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
CR2: 0000001b2dd5ffff CR3: 0000000027c28000 CR4: 00000000003526f0
DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
Call Trace:
 <TASK>
 __ocfs2_claim_clusters+0x303/0x8f0 fs/ocfs2/suballoc.c:2430
 ocfs2_local_alloc_new_window fs/ocfs2/localalloc.c:1166 [inline]
 ocfs2_local_alloc_slide_window fs/ocfs2/localalloc.c:1295 [inline]
 ocfs2_reserve_local_alloc_bits+0x12be/0x24e0 fs/ocfs2/localalloc.c:669
 ocfs2_reserve_clusters_with_limit+0x1be/0xba0 fs/ocfs2/suballoc.c:1168
 ocfs2_mknod+0xe32/0x2050 fs/ocfs2/namei.c:354
 ocfs2_mkdir+0x191/0x440 fs/ocfs2/namei.c:656
 vfs_mkdir+0x303/0x510 fs/namei.c:4366
 do_mkdirat+0x247/0x590 fs/namei.c:4399
 __do_sys_mkdirat fs/namei.c:4416 [inline]
 __se_sys_mkdirat fs/namei.c:4414 [inline]
 __x64_sys_mkdirat+0x87/0xa0 fs/namei.c:4414
 do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]
 do_syscall_64+0xfa/0x3b0 arch/x86/entry/syscall_64.c:94
 entry_SYSCALL_64_after_hwframe+0x77/0x7f
RIP: 0033:0x7f6945d8e929
Code: ff ff c3 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 40 00 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 c7 c1 a8 ff ff ff f7 d8 64 89 01 48
RSP: 002b:00007f6946c84038 EFLAGS: 00000246 ORIG_RAX: 0000000000000102
RAX: ffffffffffffffda RBX: 00007f6945fb5fa0 RCX: 00007f6945d8e929
RDX: 0000000000000081 RSI: 0000200000000000 RDI: ffffffffffffff9c
RBP: 00007f6945e10b39 R08: 0000000000000000 R09: 0000000000000000
R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000
R13: 0000000000000000 R14: 00007f6945fb5fa0 R15: 00007ffc37f061f8
 </TASK>
Modules linked in:
---[ end trace 0000000000000000 ]---
RIP: 0010:ocfs2_find_victim_chain fs/ocfs2/suballoc.c:1443 [inline]
RIP: 0010:ocfs2_claim_suballoc_bits+0x25b9/0x25d0 fs/ocfs2/suballoc.c:2005
Code: 5f fb ff ff e8 08 41 1c fe 90 0f 0b e8 00 41 1c fe 90 0f 0b e8 f8 40 1c fe 90 0f 0b e8 f0 40 1c fe 90 0f 0b e8 e8 40 1c fe 90 <0f> 0b e8 e0 40 1c fe 90 0f 0b 66 66 66 66 2e 0f 1f 84 00 00 00 00
RSP: 0018:ffffc90003496e80 EFLAGS: 00010293
RAX: ffffffff83a40da8 RBX: 0000000000000000 RCX: ffff888025d78000
RDX: 0000000000000000 RSI: 0000000000000000 RDI: 0000000000000000
RBP: ffffc90003497110 R08: ffff888072d4c103 R09: 1ffff1100e5a9820
R10: dffffc0000000000 R11: ffffed100e5a9821 R12: ffff88806f212ec4
R13: dffffc0000000000 R14: 0000000000000000 R15: ffff888072a78000
FS:  00007f6946c846c0(0000) GS:ffff888125d86000(0000) knlGS:0000000000000000
CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
CR2: 000055e32d8b1950 CR3: 0000000027c28000 CR4: 00000000003526f0
DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400


Tested on:

commit:         939f15e6 Merge tag 'turbostat-2025.06.08' of git://git..
git tree:       git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
console output: https://syzkaller.appspot.com/x/log.txt?x=12f502b4580000
kernel config:  https://syzkaller.appspot.com/x/.config?x=dcc9fa9d12bdc372
dashboard link: https://syzkaller.appspot.com/bug?extid=96d38c6e1655c1420a72
compiler:       Debian clang version 20.1.8 (++20250708063551+0c9f909b7976-1~exp1~20250708183702.136), Debian LLD 20.1.8
patch:          https://syzkaller.appspot.com/x/patch.diff?x=12d958c2580000