====================================================== WARNING: possible circular locking dependency detected 6.14.0-rc4-syzkaller-gf4ce1f3318ad #0 Not tainted ------------------------------------------------------ kworker/3:2/1464 is trying to acquire lock: ffff88804dbac420 (&htab->lockdep_key#201){....}-{2:2}, at: htab_lock_bucket kernel/bpf/hashtab.c:167 [inline] ffff88804dbac420 (&htab->lockdep_key#201){....}-{2:2}, at: htab_lru_map_delete_elem+0x1c8/0x790 kernel/bpf/hashtab.c:1483 but task is already holding lock: ffff88804bea86a0 (&htab->lockdep_key#203){....}-{2:2}, at: htab_lock_bucket kernel/bpf/hashtab.c:167 [inline] ffff88804bea86a0 (&htab->lockdep_key#203){....}-{2:2}, at: htab_lru_map_delete_elem+0x1c8/0x790 kernel/bpf/hashtab.c:1483 which lock already depends on the new lock. the existing dependency chain (in reverse order) is: -> #1 (&htab->lockdep_key#203){....}-{2:2}: __raw_spin_lock include/linux/spinlock_api_smp.h:133 [inline] _raw_spin_lock+0x2e/0x40 kernel/locking/spinlock.c:154 htab_lock_bucket kernel/bpf/hashtab.c:167 [inline] htab_lru_map_delete_elem+0x1c8/0x790 kernel/bpf/hashtab.c:1483 bpf_prog_2c29ac5cdc6b1842+0x43/0x47 bpf_dispatcher_nop_func include/linux/bpf.h:1290 [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:2371 [inline] bpf_trace_run2+0x231/0x590 kernel/trace/bpf_trace.c:2412 __bpf_trace_contention_begin+0xca/0x110 include/trace/events/lock.h:95 __traceiter_contention_begin+0x5a/0xa0 include/trace/events/lock.h:95 __preempt_count_dec_and_test arch/x86/include/asm/preempt.h:94 [inline] class_preempt_notrace_destructor include/linux/preempt.h:481 [inline] __do_trace_contention_begin include/trace/events/lock.h:95 [inline] trace_contention_begin.constprop.0+0xf3/0x170 include/trace/events/lock.h:95 __pv_queued_spin_lock_slowpath+0x10b/0xc90 kernel/locking/qspinlock.c:402 pv_queued_spin_lock_slowpath arch/x86/include/asm/paravirt.h:577 [inline] queued_spin_lock_slowpath arch/x86/include/asm/qspinlock.h:51 [inline] queued_spin_lock include/asm-generic/qspinlock.h:114 [inline] do_raw_spin_lock+0x210/0x2c0 kernel/locking/spinlock_debug.c:116 htab_lock_bucket kernel/bpf/hashtab.c:167 [inline] htab_lru_map_delete_elem+0x1c8/0x790 kernel/bpf/hashtab.c:1483 bpf_prog_2c29ac5cdc6b1842+0x43/0x47 bpf_dispatcher_nop_func include/linux/bpf.h:1290 [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:2371 [inline] bpf_trace_run2+0x231/0x590 kernel/trace/bpf_trace.c:2412 __bpf_trace_contention_begin+0xca/0x110 include/trace/events/lock.h:95 __traceiter_contention_begin+0x5a/0xa0 include/trace/events/lock.h:95 __do_trace_contention_begin include/trace/events/lock.h:95 [inline] trace_contention_begin+0xd2/0x140 include/trace/events/lock.h:95 __mutex_lock_common kernel/locking/mutex.c:587 [inline] __mutex_lock+0x1a8/0xb10 kernel/locking/mutex.c:730 lo_open+0x4a/0xd0 drivers/block/loop.c:1727 blkdev_get_whole+0x96/0x290 block/bdev.c:688 bdev_open+0x2c7/0xe20 block/bdev.c:915 blkdev_open+0x272/0x3f0 block/fops.c:652 do_dentry_open+0x735/0x1c40 fs/open.c:956 vfs_open+0x82/0x3f0 fs/open.c:1086 do_open fs/namei.c:3830 [inline] path_openat+0x1e88/0x2d80 fs/namei.c:3989 do_filp_open+0x20c/0x470 fs/namei.c:4016 do_sys_openat2+0x17a/0x1e0 fs/open.c:1428 do_sys_open fs/open.c:1443 [inline] __do_sys_openat fs/open.c:1459 [inline] __se_sys_openat fs/open.c:1454 [inline] __x64_sys_openat+0x175/0x210 fs/open.c:1454 do_syscall_x64 arch/x86/entry/common.c:52 [inline] do_syscall_64+0xcd/0x250 arch/x86/entry/common.c:83 entry_SYSCALL_64_after_hwframe+0x77/0x7f -> #0 (&htab->lockdep_key#201){....}-{2:2}: check_prev_add kernel/locking/lockdep.c:3163 [inline] check_prevs_add kernel/locking/lockdep.c:3282 [inline] validate_chain kernel/locking/lockdep.c:3906 [inline] __lock_acquire+0x249e/0x3c40 kernel/locking/lockdep.c:5228 lock_acquire.part.0+0x11b/0x380 kernel/locking/lockdep.c:5851 __raw_spin_lock include/linux/spinlock_api_smp.h:133 [inline] _raw_spin_lock+0x2e/0x40 kernel/locking/spinlock.c:154 htab_lock_bucket kernel/bpf/hashtab.c:167 [inline] htab_lru_map_delete_elem+0x1c8/0x790 kernel/bpf/hashtab.c:1483 bpf_prog_2c29ac5cdc6b1842+0x43/0x47 bpf_dispatcher_nop_func include/linux/bpf.h:1290 [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:2371 [inline] bpf_trace_run2+0x231/0x590 kernel/trace/bpf_trace.c:2412 __bpf_trace_contention_begin+0xca/0x110 include/trace/events/lock.h:95 __traceiter_contention_begin+0x5a/0xa0 include/trace/events/lock.h:95 __preempt_count_dec_and_test arch/x86/include/asm/preempt.h:94 [inline] class_preempt_notrace_destructor include/linux/preempt.h:481 [inline] __do_trace_contention_begin include/trace/events/lock.h:95 [inline] trace_contention_begin.constprop.0+0xf3/0x170 include/trace/events/lock.h:95 __pv_queued_spin_lock_slowpath+0x10b/0xc90 kernel/locking/qspinlock.c:402 pv_queued_spin_lock_slowpath arch/x86/include/asm/paravirt.h:577 [inline] queued_spin_lock_slowpath arch/x86/include/asm/qspinlock.h:51 [inline] queued_spin_lock include/asm-generic/qspinlock.h:114 [inline] do_raw_spin_lock+0x210/0x2c0 kernel/locking/spinlock_debug.c:116 htab_lock_bucket kernel/bpf/hashtab.c:167 [inline] htab_lru_map_delete_elem+0x1c8/0x790 kernel/bpf/hashtab.c:1483 bpf_prog_2c29ac5cdc6b1842+0x43/0x47 bpf_dispatcher_nop_func include/linux/bpf.h:1290 [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:2371 [inline] bpf_trace_run2+0x231/0x590 kernel/trace/bpf_trace.c:2412 __bpf_trace_contention_begin+0xca/0x110 include/trace/events/lock.h:95 __traceiter_contention_begin+0x5a/0xa0 include/trace/events/lock.h:95 __do_trace_contention_begin include/trace/events/lock.h:95 [inline] trace_contention_begin+0xd2/0x140 include/trace/events/lock.h:95 __mutex_lock_common kernel/locking/mutex.c:587 [inline] __mutex_lock+0x1a8/0xb10 kernel/locking/mutex.c:730 srcu_advance_state kernel/rcu/srcutree.c:1691 [inline] process_srcu+0x72/0x1720 kernel/rcu/srcutree.c:1851 process_one_work+0x9c5/0x1ba0 kernel/workqueue.c:3238 process_scheduled_works kernel/workqueue.c:3319 [inline] worker_thread+0x6c8/0xf00 kernel/workqueue.c:3400 kthread+0x3af/0x750 kernel/kthread.c:464 ret_from_fork+0x45/0x80 arch/x86/kernel/process.c:148 ret_from_fork_asm+0x1a/0x30 arch/x86/entry/entry_64.S:244 other info that might help us debug this: Possible unsafe locking scenario: CPU0 CPU1 ---- ---- lock(&htab->lockdep_key#203); lock(&htab->lockdep_key#201); lock(&htab->lockdep_key#203); lock(&htab->lockdep_key#201); *** DEADLOCK *** 6 locks held by kworker/3:2/1464: #0: ffff88801b08ad48 ((wq_completion)rcu_gp){+.+.}-{0:0}, at: process_one_work+0x1293/0x1ba0 kernel/workqueue.c:3213 #1: ffffc90006a1fd18 ((work_completion)(&(&ssp->srcu_sup->work)->work)){+.+.}-{0:0}, at: process_one_work+0x921/0x1ba0 kernel/workqueue.c:3214 #2: ffff88801e2fe958 (&ssp->srcu_sup->srcu_gp_mutex){+.+.}-{4:4}, at: srcu_advance_state kernel/rcu/srcutree.c:1691 [inline] #2: ffff88801e2fe958 (&ssp->srcu_sup->srcu_gp_mutex){+.+.}-{4:4}, at: process_srcu+0x72/0x1720 kernel/rcu/srcutree.c:1851 #3: ffffffff8e1bccc0 (rcu_read_lock){....}-{1:3}, at: rcu_lock_acquire include/linux/rcupdate.h:337 [inline] #3: ffffffff8e1bccc0 (rcu_read_lock){....}-{1:3}, at: rcu_read_lock include/linux/rcupdate.h:849 [inline] #3: ffffffff8e1bccc0 (rcu_read_lock){....}-{1:3}, at: __bpf_trace_run kernel/trace/bpf_trace.c:2370 [inline] #3: ffffffff8e1bccc0 (rcu_read_lock){....}-{1:3}, at: bpf_trace_run2+0x1c2/0x590 kernel/trace/bpf_trace.c:2412 #4: ffff88804bea86a0 (&htab->lockdep_key#203){....}-{2:2}, at: htab_lock_bucket kernel/bpf/hashtab.c:167 [inline] #4: ffff88804bea86a0 (&htab->lockdep_key#203){....}-{2:2}, at: htab_lru_map_delete_elem+0x1c8/0x790 kernel/bpf/hashtab.c:1483 #5: ffffffff8e1bccc0 (rcu_read_lock){....}-{1:3}, at: rcu_lock_acquire include/linux/rcupdate.h:337 [inline] #5: ffffffff8e1bccc0 (rcu_read_lock){....}-{1:3}, at: rcu_read_lock include/linux/rcupdate.h:849 [inline] #5: ffffffff8e1bccc0 (rcu_read_lock){....}-{1:3}, at: __bpf_trace_run kernel/trace/bpf_trace.c:2370 [inline] #5: ffffffff8e1bccc0 (rcu_read_lock){....}-{1:3}, at: bpf_trace_run2+0x1c2/0x590 kernel/trace/bpf_trace.c:2412 stack backtrace: CPU: 3 UID: 0 PID: 1464 Comm: kworker/3:2 Not tainted 6.14.0-rc4-syzkaller-gf4ce1f3318ad #0 Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.16.3-debian-1.16.3-2~bpo12+1 04/01/2014 Workqueue: rcu_gp process_srcu Call Trace: __dump_stack lib/dump_stack.c:94 [inline] dump_stack_lvl+0x116/0x1f0 lib/dump_stack.c:120 print_circular_bug+0x490/0x760 kernel/locking/lockdep.c:2076 check_noncircular+0x31a/0x400 kernel/locking/lockdep.c:2208 check_prev_add kernel/locking/lockdep.c:3163 [inline] check_prevs_add kernel/locking/lockdep.c:3282 [inline] validate_chain kernel/locking/lockdep.c:3906 [inline] __lock_acquire+0x249e/0x3c40 kernel/locking/lockdep.c:5228 lock_acquire.part.0+0x11b/0x380 kernel/locking/lockdep.c:5851 __raw_spin_lock include/linux/spinlock_api_smp.h:133 [inline] _raw_spin_lock+0x2e/0x40 kernel/locking/spinlock.c:154 htab_lock_bucket kernel/bpf/hashtab.c:167 [inline] htab_lru_map_delete_elem+0x1c8/0x790 kernel/bpf/hashtab.c:1483 bpf_prog_2c29ac5cdc6b1842+0x43/0x47 bpf_dispatcher_nop_func include/linux/bpf.h:1290 [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:2371 [inline] bpf_trace_run2+0x231/0x590 kernel/trace/bpf_trace.c:2412 __bpf_trace_contention_begin+0xca/0x110 include/trace/events/lock.h:95 __traceiter_contention_begin+0x5a/0xa0 include/trace/events/lock.h:95 __preempt_count_dec_and_test arch/x86/include/asm/preempt.h:94 [inline] class_preempt_notrace_destructor include/linux/preempt.h:481 [inline] __do_trace_contention_begin include/trace/events/lock.h:95 [inline] trace_contention_begin.constprop.0+0xf3/0x170 include/trace/events/lock.h:95 __pv_queued_spin_lock_slowpath+0x10b/0xc90 kernel/locking/qspinlock.c:402 pv_queued_spin_lock_slowpath arch/x86/include/asm/paravirt.h:577 [inline] queued_spin_lock_slowpath arch/x86/include/asm/qspinlock.h:51 [inline] queued_spin_lock include/asm-generic/qspinlock.h:114 [inline] do_raw_spin_lock+0x210/0x2c0 kernel/locking/spinlock_debug.c:116 htab_lock_bucket kernel/bpf/hashtab.c:167 [inline] htab_lru_map_delete_elem+0x1c8/0x790 kernel/bpf/hashtab.c:1483 bpf_prog_2c29ac5cdc6b1842+0x43/0x47 bpf_dispatcher_nop_func include/linux/bpf.h:1290 [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:2371 [inline] bpf_trace_run2+0x231/0x590 kernel/trace/bpf_trace.c:2412 __bpf_trace_contention_begin+0xca/0x110 include/trace/events/lock.h:95 __traceiter_contention_begin+0x5a/0xa0 include/trace/events/lock.h:95 __do_trace_contention_begin include/trace/events/lock.h:95 [inline] trace_contention_begin+0xd2/0x140 include/trace/events/lock.h:95 __mutex_lock_common kernel/locking/mutex.c:587 [inline] __mutex_lock+0x1a8/0xb10 kernel/locking/mutex.c:730 srcu_advance_state kernel/rcu/srcutree.c:1691 [inline] process_srcu+0x72/0x1720 kernel/rcu/srcutree.c:1851 process_one_work+0x9c5/0x1ba0 kernel/workqueue.c:3238 process_scheduled_works kernel/workqueue.c:3319 [inline] worker_thread+0x6c8/0xf00 kernel/workqueue.c:3400 kthread+0x3af/0x750 kernel/kthread.c:464 ret_from_fork+0x45/0x80 arch/x86/kernel/process.c:148 ret_from_fork_asm+0x1a/0x30 arch/x86/entry/entry_64.S:244