======================================================
WARNING: possible circular locking dependency detected
syzkaller #0 Not tainted
------------------------------------------------------
syz.3.306/5476 is trying to acquire lock:
ffff8880773d5238 (&trie->lock){..-.}-{2:2}, at: trie_delete_elem+0x90/0x710 kernel/bpf/lpm_trie.c:467
but task is already holding lock:
ffff8880b91280d8 (&base->lock){-.-.}-{2:2}, at: lock_timer_base+0x123/0x270 kernel/time/timer.c:946
which lock already depends on the new lock.
the existing dependency chain (in reverse order) is:
-> #2 (&base->lock){-.-.}-{2:2}:
__raw_spin_lock_irqsave include/linux/spinlock_api_smp.h:110 [inline]
_raw_spin_lock_irqsave+0xa4/0xf0 kernel/locking/spinlock.c:162
lock_timer_base+0x123/0x270 kernel/time/timer.c:946
__mod_timer+0x117/0xd20 kernel/time/timer.c:1019
queue_delayed_work_on+0x126/0x1e0 kernel/workqueue.c:1715
queue_delayed_work include/linux/workqueue.h:527 [inline]
schedule_delayed_work include/linux/workqueue.h:631 [inline]
kvfree_call_rcu+0x4a9/0x7c0 kernel/rcu/tree.c:3629
rtnl_register_internal+0x489/0x590 net/core/rtnetlink.c:225
rtnl_register+0x2e/0x70 net/core/rtnetlink.c:275
ip_rt_init+0x2e0/0x3a0 net/ipv4/route.c:3798
ip_init+0xa/0x20 net/ipv4/ip_output.c:1749
inet_init+0x28b/0x3a0 net/ipv4/af_inet.c:2007
do_one_initcall+0x1ee/0x680 init/main.c:1316
do_initcall_level+0x137/0x1f0 init/main.c:1389
do_initcalls+0x4b/0x90 init/main.c:1405
kernel_init_freeable+0x3ce/0x560 init/main.c:1629
kernel_init+0x19/0x1b0 init/main.c:1520
ret_from_fork+0x1f/0x30 arch/x86/entry/entry_64.S:287
-> #1 (krc.lock){..-.}-{2:2}:
__raw_spin_lock include/linux/spinlock_api_smp.h:142 [inline]
_raw_spin_lock+0x2a/0x40 kernel/locking/spinlock.c:154
krc_this_cpu_lock kernel/rcu/tree.c:3203 [inline]
add_ptr_to_bulk_krc_lock kernel/rcu/tree.c:3510 [inline]
kvfree_call_rcu+0x186/0x7c0 kernel/rcu/tree.c:3601
trie_delete_elem+0x58c/0x710 kernel/bpf/lpm_trie.c:-1
0xffffffffa00183aa
bpf_dispatcher_nop_func include/linux/bpf.h:888 [inline]
__bpf_prog_run include/linux/filter.h:628 [inline]
bpf_prog_run include/linux/filter.h:635 [inline]
__bpf_trace_run kernel/trace/bpf_trace.c:1878 [inline]
bpf_trace_run3+0x17e/0x320 kernel/trace/bpf_trace.c:1916
__bpf_trace_kmem_cache_free+0x99/0xc0 include/trace/events/kmem.h:138
trace_kmem_cache_free include/trace/events/kmem.h:138 [inline]
kmem_cache_free+0x1e7/0x210 mm/slub.c:3521
putname fs/namei.c:271 [inline]
kern_path+0x135/0x190 fs/namei.c:2592
tomoyo_realpath_nofollow+0x88/0x100 security/tomoyo/realpath.c:308
tomoyo_find_next_domain+0x24e/0x1a60 security/tomoyo/domain.c:726
tomoyo_bprm_check_security+0xdd/0x120 security/tomoyo/tomoyo.c:101
security_bprm_check+0x5e/0x90 security/security.c:868
search_binary_handler fs/exec.c:1730 [inline]
exec_binprm fs/exec.c:1783 [inline]
bprm_execve+0x9f7/0x17d0 fs/exec.c:1852
kernel_execve+0x82a/0x900 fs/exec.c:2013
call_usermodehelper_exec_async+0x207/0x350 kernel/umh.c:112
ret_from_fork+0x1f/0x30 arch/x86/entry/entry_64.S:287
-> #0 (&trie->lock){..-.}-{2:2}:
check_prev_add kernel/locking/lockdep.c:3053 [inline]
check_prevs_add kernel/locking/lockdep.c:3172 [inline]
validate_chain kernel/locking/lockdep.c:3788 [inline]
__lock_acquire+0x2c33/0x7c60 kernel/locking/lockdep.c:5012
lock_acquire+0x197/0x3f0 kernel/locking/lockdep.c:5623
__raw_spin_lock_irqsave include/linux/spinlock_api_smp.h:110 [inline]
_raw_spin_lock_irqsave+0xa4/0xf0 kernel/locking/spinlock.c:162
trie_delete_elem+0x90/0x710 kernel/bpf/lpm_trie.c:467
bpf_prog_c0188993c79ab9c8+0x3d/0x340
bpf_dispatcher_nop_func include/linux/bpf.h:888 [inline]
__bpf_prog_run include/linux/filter.h:628 [inline]
bpf_prog_run include/linux/filter.h:635 [inline]
__bpf_trace_run kernel/trace/bpf_trace.c:1878 [inline]
bpf_trace_run3+0x17e/0x320 kernel/trace/bpf_trace.c:1916
trace_timer_start include/trace/events/timer.h:52 [inline]
enqueue_timer+0x394/0x520 kernel/time/timer.c:586
internal_add_timer kernel/time/timer.c:611 [inline]
__mod_timer+0x8e1/0xd20 kernel/time/timer.c:1062
mrp_join_timer_arm net/802/mrp.c:596 [inline]
mrp_join_timer+0x142/0x180 net/802/mrp.c:611
call_timer_fn+0x16c/0x530 kernel/time/timer.c:1451
expire_timers kernel/time/timer.c:1496 [inline]
__run_timers+0x525/0x7c0 kernel/time/timer.c:1767
run_timer_softirq+0x63/0xf0 kernel/time/timer.c:1780
handle_softirqs+0x328/0x820 kernel/softirq.c:576
__do_softirq kernel/softirq.c:610 [inline]
invoke_softirq kernel/softirq.c:450 [inline]
__irq_exit_rcu+0x12f/0x220 kernel/softirq.c:659
irq_exit_rcu+0x5/0x20 kernel/softirq.c:671
instr_sysvec_apic_timer_interrupt arch/x86/kernel/apic/apic.c:1108 [inline]
sysvec_apic_timer_interrupt+0xa0/0xc0 arch/x86/kernel/apic/apic.c:1108
asm_sysvec_apic_timer_interrupt+0x16/0x20 arch/x86/include/asm/idtentry.h:676
lock_acquire+0x1f2/0x3f0 kernel/locking/lockdep.c:5627
__might_fault+0xb3/0x110 mm/memory.c:5357
_copy_from_user+0x29/0x170 lib/usercopy.c:14
copy_from_user include/linux/uaccess.h:192 [inline]
__copy_msghdr_from_user net/socket.c:2328 [inline]
copy_msghdr_from_user net/socket.c:2379 [inline]
recvmsg_copy_msghdr net/socket.c:2631 [inline]
___sys_recvmsg+0x129/0x4f0 net/socket.c:2703
do_recvmmsg+0x344/0x7a0 net/socket.c:2801
__sys_recvmmsg net/socket.c:2880 [inline]
__do_sys_recvmmsg net/socket.c:2903 [inline]
__se_sys_recvmmsg net/socket.c:2896 [inline]
__x64_sys_recvmmsg+0x18d/0x240 net/socket.c:2896
do_syscall_x64 arch/x86/entry/common.c:50 [inline]
do_syscall_64+0x4c/0xa0 arch/x86/entry/common.c:80
entry_SYSCALL_64_after_hwframe+0x66/0xd0
other info that might help us debug this:
Chain exists of:
&trie->lock --> krc.lock --> &base->lock
Possible unsafe locking scenario:
CPU0 CPU1
---- ----
lock(&base->lock);
lock(krc.lock);
lock(&base->lock);
lock(&trie->lock);
*** DEADLOCK ***
5 locks held by syz.3.306/5476:
#0: ffff88807bd0b228 (&mm->mmap_lock){++++}-{3:3}, at: __might_fault+0x90/0x110 mm/memory.c:5356
#1: ffffc90000dd0be0 ((&app->join_timer)){+.-.}-{0:0}, at: lockdep_copy_map include/linux/lockdep.h:45 [inline]
#1: ffffc90000dd0be0 ((&app->join_timer)){+.-.}-{0:0}, at: call_timer_fn+0xbb/0x530 kernel/time/timer.c:1441
#2: ffff888061d434c8 (&app->lock){+.-.}-{2:2}, at: spin_lock include/linux/spinlock.h:364 [inline]
#2: ffff888061d434c8 (&app->lock){+.-.}-{2:2}, at: mrp_join_timer+0xd2/0x180 net/802/mrp.c:609
#3: ffff8880b91280d8 (&base->lock){-.-.}-{2:2}, at: lock_timer_base+0x123/0x270 kernel/time/timer.c:946
#4: ffffffff8c11c760 (rcu_read_lock){....}-{1:2}, at: rcu_lock_acquire+0x5/0x30 include/linux/rcupdate.h:312
stack backtrace:
CPU: 1 PID: 5476 Comm: syz.3.306 Not tainted syzkaller #0
Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 10/02/2025
Call Trace:
dump_stack_lvl+0x168/0x230 lib/dump_stack.c:106
check_noncircular+0x274/0x310 kernel/locking/lockdep.c:2133
check_prev_add kernel/locking/lockdep.c:3053 [inline]
check_prevs_add kernel/locking/lockdep.c:3172 [inline]
validate_chain kernel/locking/lockdep.c:3788 [inline]
__lock_acquire+0x2c33/0x7c60 kernel/locking/lockdep.c:5012
lock_acquire+0x197/0x3f0 kernel/locking/lockdep.c:5623
__raw_spin_lock_irqsave include/linux/spinlock_api_smp.h:110 [inline]
_raw_spin_lock_irqsave+0xa4/0xf0 kernel/locking/spinlock.c:162
trie_delete_elem+0x90/0x710 kernel/bpf/lpm_trie.c:467
bpf_prog_c0188993c79ab9c8+0x3d/0x340
bpf_dispatcher_nop_func include/linux/bpf.h:888 [inline]
__bpf_prog_run include/linux/filter.h:628 [inline]
bpf_prog_run include/linux/filter.h:635 [inline]
__bpf_trace_run kernel/trace/bpf_trace.c:1878 [inline]
bpf_trace_run3+0x17e/0x320 kernel/trace/bpf_trace.c:1916
trace_timer_start include/trace/events/timer.h:52 [inline]
enqueue_timer+0x394/0x520 kernel/time/timer.c:586
internal_add_timer kernel/time/timer.c:611 [inline]
__mod_timer+0x8e1/0xd20 kernel/time/timer.c:1062
mrp_join_timer_arm net/802/mrp.c:596 [inline]
mrp_join_timer+0x142/0x180 net/802/mrp.c:611
call_timer_fn+0x16c/0x530 kernel/time/timer.c:1451
expire_timers kernel/time/timer.c:1496 [inline]
__run_timers+0x525/0x7c0 kernel/time/timer.c:1767
run_timer_softirq+0x63/0xf0 kernel/time/timer.c:1780
handle_softirqs+0x328/0x820 kernel/softirq.c:576
__do_softirq kernel/softirq.c:610 [inline]
invoke_softirq kernel/softirq.c:450 [inline]
__irq_exit_rcu+0x12f/0x220 kernel/softirq.c:659
irq_exit_rcu+0x5/0x20 kernel/softirq.c:671
instr_sysvec_apic_timer_interrupt arch/x86/kernel/apic/apic.c:1108 [inline]
sysvec_apic_timer_interrupt+0xa0/0xc0 arch/x86/kernel/apic/apic.c:1108
asm_sysvec_apic_timer_interrupt+0x16/0x20 arch/x86/include/asm/idtentry.h:676
RIP: 0010:lock_acquire+0x1f2/0x3f0 kernel/locking/lockdep.c:5627
Code: 00 9c 8f 84 24 80 00 00 00 f6 84 24 81 00 00 00 02 0f 85 f6 00 00 00 41 f7 c6 00 02 00 00 74 01 fb 48 c7 44 24 60 0e 36 e0 45 <4b> c7 44 3d 00 00 00 00 00 66 43 c7 44 3d 09 00 00 43 c6 44 3d 0b
RSP: 0000:ffffc90003a87900 EFLAGS: 00000206
RAX: 0000000000000001 RBX: 0000000000000000 RCX: a64e431acebf2300
RDX: 0000000000000000 RSI: ffffffff8a0b2f00 RDI: ffffffff8a59e580
RBP: ffffc90003a87a20 R08: dffffc0000000000 R09: fffffbfff1ff7c1f
R10: fffffbfff1ff7c1f R11: 1ffffffff1ff7c1e R12: ffff88807bd0b228
R13: 1ffff92000750f2c R14: 0000000000000246 R15: dffffc0000000000
__might_fault+0xb3/0x110 mm/memory.c:5357
_copy_from_user+0x29/0x170 lib/usercopy.c:14
copy_from_user include/linux/uaccess.h:192 [inline]
__copy_msghdr_from_user net/socket.c:2328 [inline]
copy_msghdr_from_user net/socket.c:2379 [inline]
recvmsg_copy_msghdr net/socket.c:2631 [inline]
___sys_recvmsg+0x129/0x4f0 net/socket.c:2703
do_recvmmsg+0x344/0x7a0 net/socket.c:2801
__sys_recvmmsg net/socket.c:2880 [inline]
__do_sys_recvmmsg net/socket.c:2903 [inline]
__se_sys_recvmmsg net/socket.c:2896 [inline]
__x64_sys_recvmmsg+0x18d/0x240 net/socket.c:2896
do_syscall_x64 arch/x86/entry/common.c:50 [inline]
do_syscall_64+0x4c/0xa0 arch/x86/entry/common.c:80
entry_SYSCALL_64_after_hwframe+0x66/0xd0
RIP: 0033:0x7f8d2c760749
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:00007f8d2a9a6038 EFLAGS: 00000246 ORIG_RAX: 000000000000012b
RAX: ffffffffffffffda RBX: 00007f8d2c9b7090 RCX: 00007f8d2c760749
RDX: 03fffffffffffcb5 RSI: 00002000000000c0 RDI: 0000000000000006
RBP: 00007f8d2c7e4f91 R08: 0000000000000000 R09: 0000000000000000
R10: 0000000000000002 R11: 0000000000000246 R12: 0000000000000000
R13: 00007f8d2c9b7128 R14: 00007f8d2c9b7090 R15: 00007fff4de4d1d8
----------------
Code disassembly (best guess):
0: 00 9c 8f 84 24 80 00 add %bl,0x802484(%rdi,%rcx,4)
7: 00 00 add %al,(%rax)
9: f6 84 24 81 00 00 00 testb $0x2,0x81(%rsp)
10: 02
11: 0f 85 f6 00 00 00 jne 0x10d
17: 41 f7 c6 00 02 00 00 test $0x200,%r14d
1e: 74 01 je 0x21
20: fb sti
21: 48 c7 44 24 60 0e 36 movq $0x45e0360e,0x60(%rsp)
28: e0 45
* 2a: 4b c7 44 3d 00 00 00 movq $0x0,0x0(%r13,%r15,1) <-- trapping instruction
31: 00 00
33: 66 43 c7 44 3d 09 00 movw $0x0,0x9(%r13,%r15,1)
3a: 00
3b: 43 rex.XB
3c: c6 .byte 0xc6
3d: 44 rex.R
3e: 3d .byte 0x3d
3f: 0b .byte 0xb