Hello,
syzbot found the following issue on:
HEAD commit: 563edd786f0a Linux 6.1.122
git tree: linux-6.1.y
console output:
https://syzkaller.appspot.com/x/log.txt?x=16d0fac4580000
kernel config:
https://syzkaller.appspot.com/x/.config?x=4d23ad74b95a6ead
dashboard link:
https://syzkaller.appspot.com/bug?extid=2efc8bd7a919b4f33cff
compiler: Debian clang version 15.0.6, GNU ld (GNU Binutils for Debian) 2.40
userspace arch: arm64
Unfortunately, I don't have any reproducer for this issue yet.
Downloadable assets:
disk image:
https://storage.googleapis.com/syzbot-assets/092e3fd371c6/disk-563edd78.raw.xz
vmlinux:
https://storage.googleapis.com/syzbot-assets/e38af8a28784/vmlinux-563edd78.xz
kernel image:
https://storage.googleapis.com/syzbot-assets/e19edf883c6a/Image-563edd78.gz.xz
IMPORTANT: if you fix the issue, please add the following tag to the commit:
Reported-by:
syzbot+2efc8b...@syzkaller.appspotmail.com
======================================================
WARNING: possible circular locking dependency detected
6.1.122-syzkaller #0 Tainted: G W
------------------------------------------------------
syz.0.1/4391 is trying to acquire lock:
ffff0000f59ab120 (&oi->ip_alloc_sem){++++}-{3:3}, at: ocfs2_read_virt_blocks+0x2bc/0x9f8 fs/ocfs2/extent_map.c:976
but task is already holding lock:
ffff0000d3022990 (jbd2_handle){++++}-{0:0}, at: start_this_handle+0x1118/0x13ac fs/jbd2/transaction.c:461
which lock already depends on the new lock.
the existing dependency chain (in reverse order) is:
-> #3 (jbd2_handle){++++}-{0:0}:
start_this_handle+0x1140/0x13ac fs/jbd2/transaction.c:463
jbd2__journal_start+0x298/0x544 fs/jbd2/transaction.c:520
jbd2_journal_start+0x3c/0x4c fs/jbd2/transaction.c:559
ocfs2_start_trans+0x3e8/0x73c fs/ocfs2/journal.c:354
ocfs2_mknod+0xe64/0x2560 fs/ocfs2/namei.c:361
ocfs2_create+0x1a8/0x560 fs/ocfs2/namei.c:674
lookup_open fs/namei.c:3482 [inline]
open_last_lookups fs/namei.c:3550 [inline]
path_openat+0xeac/0x2548 fs/namei.c:3780
do_filp_open+0x1bc/0x3cc fs/namei.c:3810
do_sys_openat2+0x128/0x3e0 fs/open.c:1318
do_sys_open fs/open.c:1334 [inline]
__do_sys_openat fs/open.c:1350 [inline]
__se_sys_openat fs/open.c:1345 [inline]
__arm64_sys_openat+0x1f0/0x240 fs/open.c:1345
__invoke_syscall arch/arm64/kernel/syscall.c:38 [inline]
invoke_syscall+0x98/0x2bc arch/arm64/kernel/syscall.c:52
el0_svc_common+0x138/0x258 arch/arm64/kernel/syscall.c:140
do_el0_svc+0x58/0x13c arch/arm64/kernel/syscall.c:204
el0_svc+0x58/0x168 arch/arm64/kernel/entry-common.c:637
el0t_64_sync_handler+0x84/0xf0 arch/arm64/kernel/entry-common.c:655
el0t_64_sync+0x18c/0x190 arch/arm64/kernel/entry.S:585
-> #2 (&journal->j_trans_barrier){.+.+}-{3:3}:
down_read+0x64/0x308 kernel/locking/rwsem.c:1520
ocfs2_start_trans+0x3dc/0x73c fs/ocfs2/journal.c:352
ocfs2_mknod+0xe64/0x2560 fs/ocfs2/namei.c:361
ocfs2_create+0x1a8/0x560 fs/ocfs2/namei.c:674
lookup_open fs/namei.c:3482 [inline]
open_last_lookups fs/namei.c:3550 [inline]
path_openat+0xeac/0x2548 fs/namei.c:3780
do_filp_open+0x1bc/0x3cc fs/namei.c:3810
do_sys_openat2+0x128/0x3e0 fs/open.c:1318
do_sys_open fs/open.c:1334 [inline]
__do_sys_openat fs/open.c:1350 [inline]
__se_sys_openat fs/open.c:1345 [inline]
__arm64_sys_openat+0x1f0/0x240 fs/open.c:1345
__invoke_syscall arch/arm64/kernel/syscall.c:38 [inline]
invoke_syscall+0x98/0x2bc arch/arm64/kernel/syscall.c:52
el0_svc_common+0x138/0x258 arch/arm64/kernel/syscall.c:140
do_el0_svc+0x58/0x13c arch/arm64/kernel/syscall.c:204
el0_svc+0x58/0x168 arch/arm64/kernel/entry-common.c:637
el0t_64_sync_handler+0x84/0xf0 arch/arm64/kernel/entry-common.c:655
el0t_64_sync+0x18c/0x190 arch/arm64/kernel/entry.S:585
-> #1 (sb_internal#2){.+.+}-{0:0}:
percpu_down_read include/linux/percpu-rwsem.h:51 [inline]
__sb_start_write include/linux/fs.h:1891 [inline]
sb_start_intwrite include/linux/fs.h:2013 [inline]
ocfs2_start_trans+0x260/0x73c fs/ocfs2/journal.c:350
ocfs2_write_begin_nolock+0x27c8/0x3f6c fs/ocfs2/aops.c:1770
ocfs2_write_begin+0x1ac/0x38c fs/ocfs2/aops.c:1904
generic_perform_write+0x278/0x55c mm/filemap.c:3845
__generic_file_write_iter+0x168/0x388 mm/filemap.c:3973
ocfs2_file_write_iter+0x156c/0x1f48 fs/ocfs2/file.c:2469
call_write_iter include/linux/fs.h:2265 [inline]
new_sync_write fs/read_write.c:491 [inline]
vfs_write+0x610/0x91c fs/read_write.c:584
ksys_write+0x15c/0x26c fs/read_write.c:637
__do_sys_write fs/read_write.c:649 [inline]
__se_sys_write fs/read_write.c:646 [inline]
__arm64_sys_write+0x7c/0x90 fs/read_write.c:646
__invoke_syscall arch/arm64/kernel/syscall.c:38 [inline]
invoke_syscall+0x98/0x2bc arch/arm64/kernel/syscall.c:52
el0_svc_common+0x138/0x258 arch/arm64/kernel/syscall.c:140
do_el0_svc+0x58/0x13c arch/arm64/kernel/syscall.c:204
el0_svc+0x58/0x168 arch/arm64/kernel/entry-common.c:637
el0t_64_sync_handler+0x84/0xf0 arch/arm64/kernel/entry-common.c:655
el0t_64_sync+0x18c/0x190 arch/arm64/kernel/entry.S:585
-> #0 (&oi->ip_alloc_sem){++++}-{3:3}:
check_prev_add kernel/locking/lockdep.c:3090 [inline]
check_prevs_add kernel/locking/lockdep.c:3209 [inline]
validate_chain kernel/locking/lockdep.c:3825 [inline]
__lock_acquire+0x3338/0x7680 kernel/locking/lockdep.c:5049
lock_acquire+0x26c/0x7cc kernel/locking/lockdep.c:5662
down_read+0x64/0x308 kernel/locking/rwsem.c:1520
ocfs2_read_virt_blocks+0x2bc/0x9f8 fs/ocfs2/extent_map.c:976
ocfs2_read_dir_block fs/ocfs2/dir.c:508 [inline]
ocfs2_find_entry_el fs/ocfs2/dir.c:715 [inline]
ocfs2_find_entry+0x3ac/0x2620 fs/ocfs2/dir.c:1080
ocfs2_rename+0x1cb4/0x3588 fs/ocfs2/namei.c:1568
vfs_rename+0xac8/0xe04 fs/namei.c:4874
do_renameat2+0x9ec/0xe64 fs/namei.c:5027
__do_sys_renameat2 fs/namei.c:5060 [inline]
__se_sys_renameat2 fs/namei.c:5057 [inline]
__arm64_sys_renameat2+0xe0/0xfc fs/namei.c:5057
__invoke_syscall arch/arm64/kernel/syscall.c:38 [inline]
invoke_syscall+0x98/0x2bc arch/arm64/kernel/syscall.c:52
el0_svc_common+0x138/0x258 arch/arm64/kernel/syscall.c:140
do_el0_svc+0x58/0x13c arch/arm64/kernel/syscall.c:204
el0_svc+0x58/0x168 arch/arm64/kernel/entry-common.c:637
el0t_64_sync_handler+0x84/0xf0 arch/arm64/kernel/entry-common.c:655
el0t_64_sync+0x18c/0x190 arch/arm64/kernel/entry.S:585
other info that might help us debug this:
Chain exists of:
&oi->ip_alloc_sem --> &journal->j_trans_barrier --> jbd2_handle
Possible unsafe locking scenario:
CPU0 CPU1
---- ----
lock(jbd2_handle);
lock(&journal->j_trans_barrier);
lock(jbd2_handle);
lock(&oi->ip_alloc_sem);
*** DEADLOCK ***
8 locks held by syz.0.1/4391:
#0: ffff0000d33a0460 (sb_writers#13){.+.+}-{0:0}, at: mnt_want_write+0x44/0x9c fs/namespace.c:393
#1: ffff0000d33a0748 (&type->s_vfs_rename_key){+.+.}-{3:3}, at: lock_rename fs/namei.c:3038 [inline]
#1: ffff0000d33a0748 (&type->s_vfs_rename_key){+.+.}-{3:3}, at: do_renameat2+0x498/0xe64 fs/namei.c:4966
#2: ffff0000f59aa648 (&sb->s_type->i_mutex_key#21/1){+.+.}-{3:3}, at: lock_rename fs/namei.c:3039 [inline]
#2: ffff0000f59aa648 (&sb->s_type->i_mutex_key#21/1){+.+.}-{3:3}, at: do_renameat2+0x50c/0xe64 fs/namei.c:4966
#3: ffff0000f59ab488 (&sb->s_type->i_mutex_key#21/5){+.+.}-{3:3}, at: do_renameat2+0x538/0xe64 fs/namei.c:4966
#4: ffff0000f59ac2c8 (&sb->s_type->i_mutex_key#21/2){+.+.}-{3:3}, at: inode_lock_nested include/linux/fs.h:793 [inline]
#4: ffff0000f59ac2c8 (&sb->s_type->i_mutex_key#21/2){+.+.}-{3:3}, at: vfs_rename+0x624/0xe04 fs/namei.c:4837
#5: ffff0000d33a0650 (sb_internal#2){.+.+}-{0:0}, at: ocfs2_rename+0x1870/0x3588 fs/ocfs2/namei.c:1488
#6: ffff0000cc7b48e8 (&journal->j_trans_barrier){.+.+}-{3:3}, at: ocfs2_start_trans+0x3dc/0x73c fs/ocfs2/journal.c:352
#7: ffff0000d3022990 (jbd2_handle){++++}-{0:0}, at: start_this_handle+0x1118/0x13ac fs/jbd2/transaction.c:461
stack backtrace:
CPU: 0 PID: 4391 Comm: syz.0.1 Tainted: G W 6.1.122-syzkaller #0
Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 09/13/2024
Call trace:
dump_backtrace+0x1c8/0x1f4 arch/arm64/kernel/stacktrace.c:158
show_stack+0x2c/0x3c arch/arm64/kernel/stacktrace.c:165
__dump_stack lib/dump_stack.c:88 [inline]
dump_stack_lvl+0x108/0x170 lib/dump_stack.c:106
dump_stack+0x1c/0x58 lib/dump_stack.c:113
print_circular_bug+0x150/0x1b8 kernel/locking/lockdep.c:2048
check_noncircular+0x2cc/0x378 kernel/locking/lockdep.c:2170
check_prev_add kernel/locking/lockdep.c:3090 [inline]
check_prevs_add kernel/locking/lockdep.c:3209 [inline]
validate_chain kernel/locking/lockdep.c:3825 [inline]
__lock_acquire+0x3338/0x7680 kernel/locking/lockdep.c:5049
lock_acquire+0x26c/0x7cc kernel/locking/lockdep.c:5662
down_read+0x64/0x308 kernel/locking/rwsem.c:1520
ocfs2_read_virt_blocks+0x2bc/0x9f8 fs/ocfs2/extent_map.c:976
ocfs2_read_dir_block fs/ocfs2/dir.c:508 [inline]
ocfs2_find_entry_el fs/ocfs2/dir.c:715 [inline]
ocfs2_find_entry+0x3ac/0x2620 fs/ocfs2/dir.c:1080
ocfs2_rename+0x1cb4/0x3588 fs/ocfs2/namei.c:1568
vfs_rename+0xac8/0xe04 fs/namei.c:4874
do_renameat2+0x9ec/0xe64 fs/namei.c:5027
__do_sys_renameat2 fs/namei.c:5060 [inline]
__se_sys_renameat2 fs/namei.c:5057 [inline]
__arm64_sys_renameat2+0xe0/0xfc fs/namei.c:5057
__invoke_syscall arch/arm64/kernel/syscall.c:38 [inline]
invoke_syscall+0x98/0x2bc arch/arm64/kernel/syscall.c:52
el0_svc_common+0x138/0x258 arch/arm64/kernel/syscall.c:140
do_el0_svc+0x58/0x13c arch/arm64/kernel/syscall.c:204
el0_svc+0x58/0x168 arch/arm64/kernel/entry-common.c:637
el0t_64_sync_handler+0x84/0xf0 arch/arm64/kernel/entry-common.c:655
el0t_64_sync+0x18c/0x190 arch/arm64/kernel/entry.S:585