======================================================
WARNING: possible circular locking dependency detected
6.12.0-rc6-syzkaller-00169-g906bd684e4b1 #0 Not tainted
------------------------------------------------------
syz.0.3258/22008 is trying to acquire lock:
ffff8880b8729430 (krc.lock){..-.}-{2:2}, at: krc_this_cpu_lock kernel/rcu/tree.c:3312 [inline]
ffff8880b8729430 (krc.lock){..-.}-{2:2}, at: add_ptr_to_bulk_krc_lock kernel/rcu/tree.c:3725 [inline]
ffff8880b8729430 (krc.lock){..-.}-{2:2}, at: kvfree_call_rcu+0x18a/0x790 kernel/rcu/tree.c:3811
but task is already holding lock:
ffff8880b872a718 (&base->lock){-.-.}-{2:2}, at: lock_timer_base+0x112/0x240 kernel/time/timer.c:1051
which lock already depends on the new lock.
the existing dependency chain (in reverse order) is:
-> #1 (&base->lock){-.-.}-{2:2}:
lock_acquire+0x1ed/0x550 kernel/locking/lockdep.c:5825
__raw_spin_lock_irqsave include/linux/spinlock_api_smp.h:110 [inline]
_raw_spin_lock_irqsave+0xd5/0x120 kernel/locking/spinlock.c:162
lock_timer_base+0x112/0x240 kernel/time/timer.c:1051
__mod_timer+0x1ca/0xeb0 kernel/time/timer.c:1132
queue_delayed_work_on+0x1ca/0x390 kernel/workqueue.c:2552
kvfree_call_rcu+0x47f/0x790 kernel/rcu/tree.c:3839
pwq_release_workfn+0x664/0x800 kernel/workqueue.c:5078
kthread_worker_fn+0x502/0xb70 kernel/kthread.c:844
kthread+0x2f2/0x390 kernel/kthread.c:389
ret_from_fork+0x4d/0x80 arch/x86/kernel/process.c:147
ret_from_fork_asm+0x1a/0x30 arch/x86/entry/entry_64.S:244
-> #0 (krc.lock){..-.}-{2:2}:
check_prev_add kernel/locking/lockdep.c:3161 [inline]
check_prevs_add kernel/locking/lockdep.c:3280 [inline]
validate_chain+0x18ef/0x5920 kernel/locking/lockdep.c:3904
__lock_acquire+0x1384/0x2050 kernel/locking/lockdep.c:5202
lock_acquire+0x1ed/0x550 kernel/locking/lockdep.c:5825
__raw_spin_lock include/linux/spinlock_api_smp.h:133 [inline]
_raw_spin_lock+0x2e/0x40 kernel/locking/spinlock.c:154
krc_this_cpu_lock kernel/rcu/tree.c:3312 [inline]
add_ptr_to_bulk_krc_lock kernel/rcu/tree.c:3725 [inline]
kvfree_call_rcu+0x18a/0x790 kernel/rcu/tree.c:3811
trie_delete_elem+0x546/0x6a0 kernel/bpf/lpm_trie.c:540
bpf_prog_2e5e7763945ac34e+0x45/0x4d
bpf_dispatcher_nop_func include/linux/bpf.h:1265 [inline]
__bpf_prog_run include/linux/filter.h:701 [inline]
bpf_prog_run include/linux/filter.h:708 [inline]
__bpf_trace_run kernel/trace/bpf_trace.c:2316 [inline]
bpf_trace_run2+0x2ee/0x540 kernel/trace/bpf_trace.c:2357
__traceiter_timer_start+0x77/0xc0 include/trace/events/timer.h:52
trace_timer_start include/trace/events/timer.h:52 [inline]
enqueue_timer+0x3ce/0x570 kernel/time/timer.c:663
internal_add_timer kernel/time/timer.c:688 [inline]
__mod_timer+0xa0e/0xeb0 kernel/time/timer.c:1183
mrp_join_timer_arm net/802/mrp.c:597 [inline]
mrp_join_timer+0x148/0x180 net/802/mrp.c:612
call_timer_fn+0x190/0x650 kernel/time/timer.c:1794
expire_timers kernel/time/timer.c:1845 [inline]
__run_timers kernel/time/timer.c:2419 [inline]
__run_timer_base+0x66a/0x8e0 kernel/time/timer.c:2430
run_timer_base kernel/time/timer.c:2439 [inline]
run_timer_softirq+0xb7/0x170 kernel/time/timer.c:2449
handle_softirqs+0x2c7/0x980 kernel/softirq.c:554
__do_softirq kernel/softirq.c:588 [inline]
invoke_softirq kernel/softirq.c:428 [inline]
__irq_exit_rcu+0xf4/0x1c0 kernel/softirq.c:637
irq_exit_rcu+0x9/0x30 kernel/softirq.c:649
instr_sysvec_apic_timer_interrupt arch/x86/kernel/apic/apic.c:1049 [inline]
sysvec_apic_timer_interrupt+0xa6/0xc0 arch/x86/kernel/apic/apic.c:1049
asm_sysvec_apic_timer_interrupt+0x1a/0x20 arch/x86/include/asm/idtentry.h:702
lockdep_unregister_key+0x56d/0x610 kernel/locking/lockdep.c:6569
__qdisc_destroy+0x165/0x410 net/sched/sch_generic.c:1085
netdev_for_each_tx_queue include/linux/netdevice.h:2504 [inline]
dev_shutdown+0x9b/0x450 net/sched/sch_generic.c:1496
unregister_netdevice_many_notify+0x995/0x1da0 net/core/dev.c:11396
unregister_netdevice_many net/core/dev.c:11469 [inline]
unregister_netdevice_queue+0x303/0x370 net/core/dev.c:11343
unregister_netdevice include/linux/netdevice.h:3118 [inline]
__tun_detach+0x6b9/0x1600 drivers/net/tun.c:685
tun_detach drivers/net/tun.c:701 [inline]
tun_chr_close+0x105/0x1b0 drivers/net/tun.c:3517
__fput+0x241/0x880 fs/file_table.c:431
task_work_run+0x251/0x310 kernel/task_work.c:239
resume_user_mode_work include/linux/resume_user_mode.h:50 [inline]
exit_to_user_mode_loop kernel/entry/common.c:114 [inline]
exit_to_user_mode_prepare include/linux/entry-common.h:328 [inline]
__syscall_exit_to_user_mode_work kernel/entry/common.c:207 [inline]
syscall_exit_to_user_mode+0x168/0x370 kernel/entry/common.c:218
do_syscall_64+0x100/0x230 arch/x86/entry/common.c:89
entry_SYSCALL_64_after_hwframe+0x77/0x7f
other info that might help us debug this:
Possible unsafe locking scenario:
CPU0 CPU1
---- ----
lock(&base->lock);
lock(krc.lock);
lock(&base->lock);
lock(krc.lock);
*** DEADLOCK ***
5 locks held by syz.0.3258/22008:
#0: ffffffff8fcd3948 (rtnl_mutex){+.+.}-{3:3}, at: tun_detach drivers/net/tun.c:698 [inline]
#0: ffffffff8fcd3948 (rtnl_mutex){+.+.}-{3:3}, at: tun_chr_close+0x3b/0x1b0 drivers/net/tun.c:3517
#1: ffffc90000a18c00 ((&app->join_timer)){+.-.}-{0:0}, at: call_timer_fn+0xc0/0x650 kernel/time/timer.c:1791
#2: ffff88802a1700c8 (&app->lock){+.-.}-{2:2}, at: spin_lock include/linux/spinlock.h:351 [inline]
#2: ffff88802a1700c8 (&app->lock){+.-.}-{2:2}, at: mrp_join_timer+0xce/0x180 net/802/mrp.c:610
#3: ffff8880b872a718 (&base->lock){-.-.}-{2:2}, at: lock_timer_base+0x112/0x240 kernel/time/timer.c:1051
#4: ffffffff8e937da0 (rcu_read_lock){....}-{1:2}, at: rcu_lock_acquire include/linux/rcupdate.h:337 [inline]
#4: ffffffff8e937da0 (rcu_read_lock){....}-{1:2}, at: rcu_read_lock include/linux/rcupdate.h:849 [inline]
#4: ffffffff8e937da0 (rcu_read_lock){....}-{1:2}, at: __bpf_trace_run kernel/trace/bpf_trace.c:2315 [inline]
#4: ffffffff8e937da0 (rcu_read_lock){....}-{1:2}, at: bpf_trace_run2+0x1fc/0x540 kernel/trace/bpf_trace.c:2357
stack backtrace:
CPU: 1 UID: 0 PID: 22008 Comm: syz.0.3258 Not tainted 6.12.0-rc6-syzkaller-00169-g906bd684e4b1 #0
Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 10/30/2024
Call Trace:
__dump_stack lib/dump_stack.c:94 [inline]
dump_stack_lvl+0x241/0x360 lib/dump_stack.c:120
print_circular_bug+0x13a/0x1b0 kernel/locking/lockdep.c:2074
check_noncircular+0x36a/0x4a0 kernel/locking/lockdep.c:2206
check_prev_add kernel/locking/lockdep.c:3161 [inline]
check_prevs_add kernel/locking/lockdep.c:3280 [inline]
validate_chain+0x18ef/0x5920 kernel/locking/lockdep.c:3904
__lock_acquire+0x1384/0x2050 kernel/locking/lockdep.c:5202
lock_acquire+0x1ed/0x550 kernel/locking/lockdep.c:5825
__raw_spin_lock include/linux/spinlock_api_smp.h:133 [inline]
_raw_spin_lock+0x2e/0x40 kernel/locking/spinlock.c:154
krc_this_cpu_lock kernel/rcu/tree.c:3312 [inline]
add_ptr_to_bulk_krc_lock kernel/rcu/tree.c:3725 [inline]
kvfree_call_rcu+0x18a/0x790 kernel/rcu/tree.c:3811
trie_delete_elem+0x546/0x6a0 kernel/bpf/lpm_trie.c:540
bpf_prog_2e5e7763945ac34e+0x45/0x4d
bpf_dispatcher_nop_func include/linux/bpf.h:1265 [inline]
__bpf_prog_run include/linux/filter.h:701 [inline]
bpf_prog_run include/linux/filter.h:708 [inline]
__bpf_trace_run kernel/trace/bpf_trace.c:2316 [inline]
bpf_trace_run2+0x2ee/0x540 kernel/trace/bpf_trace.c:2357
__traceiter_timer_start+0x77/0xc0 include/trace/events/timer.h:52
trace_timer_start include/trace/events/timer.h:52 [inline]
enqueue_timer+0x3ce/0x570 kernel/time/timer.c:663
internal_add_timer kernel/time/timer.c:688 [inline]
__mod_timer+0xa0e/0xeb0 kernel/time/timer.c:1183
mrp_join_timer_arm net/802/mrp.c:597 [inline]
mrp_join_timer+0x148/0x180 net/802/mrp.c:612
call_timer_fn+0x190/0x650 kernel/time/timer.c:1794
expire_timers kernel/time/timer.c:1845 [inline]
__run_timers kernel/time/timer.c:2419 [inline]
__run_timer_base+0x66a/0x8e0 kernel/time/timer.c:2430
run_timer_base kernel/time/timer.c:2439 [inline]
run_timer_softirq+0xb7/0x170 kernel/time/timer.c:2449
handle_softirqs+0x2c7/0x980 kernel/softirq.c:554
__do_softirq kernel/softirq.c:588 [inline]
invoke_softirq kernel/softirq.c:428 [inline]
__irq_exit_rcu+0xf4/0x1c0 kernel/softirq.c:637
irq_exit_rcu+0x9/0x30 kernel/softirq.c:649
instr_sysvec_apic_timer_interrupt arch/x86/kernel/apic/apic.c:1049 [inline]
sysvec_apic_timer_interrupt+0xa6/0xc0 arch/x86/kernel/apic/apic.c:1049
asm_sysvec_apic_timer_interrupt+0x1a/0x20 arch/x86/include/asm/idtentry.h:702
RIP: 0010:lockdep_unregister_key+0x56d/0x610 kernel/locking/lockdep.c:6569
Code: 27 94 48 c7 c6 30 9e 70 81 e8 1f 46 0a 00 e8 8a 5a 0a 00 e9 e5 fb ff ff e8 60 aa 56 0a 41 f7 c7 00 02 00 00 74 d0 fb 45 84 f6 <75> cf eb e0 90 0f 0b 90 45 31 f6 e9 62 ff ff ff 90 0f 0b 90 e9 a1
RSP: 0018:ffffc9000336f880 EFLAGS: 00000246
RAX: dffffc0000000000 RBX: 1ffff9200066df18 RCX: ffffffff9a3d4903
RDX: 0000000000000001 RSI: ffffffff8c0ad7a0 RDI: ffffffff8c610960
RBP: ffffc9000336f958 R08: ffffffff94280d6f R09: 1ffffffff28501ad
R10: dffffc0000000000 R11: fffffbfff28501ae R12: ffffc9000336f8c0
R13: 1ffff9200066df14 R14: 0000000000000000 R15: 0000000000000217
__qdisc_destroy+0x165/0x410 net/sched/sch_generic.c:1085
netdev_for_each_tx_queue include/linux/netdevice.h:2504 [inline]
dev_shutdown+0x9b/0x450 net/sched/sch_generic.c:1496
unregister_netdevice_many_notify+0x995/0x1da0 net/core/dev.c:11396
unregister_netdevice_many net/core/dev.c:11469 [inline]
unregister_netdevice_queue+0x303/0x370 net/core/dev.c:11343
unregister_netdevice include/linux/netdevice.h:3118 [inline]
__tun_detach+0x6b9/0x1600 drivers/net/tun.c:685
tun_detach drivers/net/tun.c:701 [inline]
tun_chr_close+0x105/0x1b0 drivers/net/tun.c:3517
__fput+0x241/0x880 fs/file_table.c:431
task_work_run+0x251/0x310 kernel/task_work.c:239
resume_user_mode_work include/linux/resume_user_mode.h:50 [inline]
exit_to_user_mode_loop kernel/entry/common.c:114 [inline]
exit_to_user_mode_prepare include/linux/entry-common.h:328 [inline]
__syscall_exit_to_user_mode_work kernel/entry/common.c:207 [inline]
syscall_exit_to_user_mode+0x168/0x370 kernel/entry/common.c:218
do_syscall_64+0x100/0x230 arch/x86/entry/common.c:89
entry_SYSCALL_64_after_hwframe+0x77/0x7f
RIP: 0033:0x7f68b257e719
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:00007ffe2e71a308 EFLAGS: 00000246 ORIG_RAX: 00000000000001b4
RAX: 0000000000000000 RBX: 00007f68b2737a80 RCX: 00007f68b257e719
RDX: 0000000000000000 RSI: 000000000000001e RDI: 0000000000000003
RBP: 00007f68b2737a80 R08: 00007f68b2722000 R09: 00007ffe2e71a5ff
R10: 00000000003ffd20 R11: 0000000000000246 R12: 000000000018d9d1
R13: 00007ffe2e71a410 R14: 0000000000000032 R15: ffffffffffffffff
----------------
Code disassembly (best guess), 1 bytes skipped:
0: 94 xchg %eax,%esp
1: 48 c7 c6 30 9e 70 81 mov $0xffffffff81709e30,%rsi
8: e8 1f 46 0a 00 call 0xa462c
d: e8 8a 5a 0a 00 call 0xa5a9c
12: e9 e5 fb ff ff jmp 0xfffffbfc
17: e8 60 aa 56 0a call 0xa56aa7c
1c: 41 f7 c7 00 02 00 00 test $0x200,%r15d
23: 74 d0 je 0xfffffff5
25: fb sti
26: 45 84 f6 test %r14b,%r14b
* 29: 75 cf jne 0xfffffffa <-- trapping instruction
2b: eb e0 jmp 0xd
2d: 90 nop
2e: 0f 0b ud2
30: 90 nop
31: 45 31 f6 xor %r14d,%r14d
34: e9 62 ff ff ff jmp 0xffffff9b
39: 90 nop
3a: 0f 0b ud2
3c: 90 nop
3d: e9 .byte 0xe9
3e: a1 .byte 0xa1