Hi, Our bpf fuzzer, a customized Syzkaller, triggered a lockdep warning in the bpf queue map in v5.15. Since queue_stack_maps.c has no major changes since v5.15, we think this should still exist in the latest kernel. The bug can be occasionally triggered, and we suspect one of the eBPF programs involved to be the following one. We also attached the lockdep warning at the end. #define DEFINE_BPF_MAP_NO_KEY(the_map, TypeOfMap, MapFlags, TypeOfValue, MaxEntries) \ struct { \ __uint(type, TypeOfMap); \ __uint(map_flags, (MapFlags)); \ __uint(max_entries, (MaxEntries)); \ __type(value, TypeOfValue); \ } the_map SEC(".maps"); DEFINE_BPF_MAP_NO_KEY(map_0, BPF_MAP_TYPE_QUEUE, 0 | BPF_F_WRONLY, struct_0, 162); SEC("perf_event") int func(struct bpf_perf_event_data *ctx) { char v0[96] = {}; uint64_t v1 = 0; v1 = bpf_map_pop_elem(&map_0, v0); return 163819661; } The program is attached to the following perf event. struct perf_event_attr attr_type_hw = { .type = PERF_TYPE_HARDWARE, .config = PERF_COUNT_HW_CPU_CYCLES, .sample_freq = 50, .inherit = 1, .freq = 1, }; ================================WARNING: inconsistent lock state 5.15.26+ #2 Not tainted -------------------------------- inconsistent {INITIAL USE} -> {IN-NMI} usage. syz-executor.5/19749 [HC1[1]:SC0[0]:HE0:SE1] takes: ffff88804c9fc198 (&qs->lock){..-.}-{2:2}, at: __queue_map_get+0x31/0x250 {INITIAL USE} state was registered at: lock_acquire+0x1a3/0x4b0 _raw_spin_lock_irqsave+0x48/0x60 __queue_map_get+0x31/0x250 bpf_prog_577904e86c81dead_func+0x12/0x4b4 trace_call_bpf+0x262/0x5d0 perf_trace_run_bpf_submit+0x91/0x1c0 perf_trace_sched_switch+0x46c/0x700 __schedule+0x11b5/0x24a0 schedule+0xd4/0x270 futex_wait_queue_me+0x25f/0x520 futex_wait+0x1e0/0x5f0 do_futex+0x395/0x1890 __x64_sys_futex+0x1cb/0x480 do_syscall_64+0x3b/0xc0 entry_SYSCALL_64_after_hwframe+0x44/0xae irq event stamp: 13640 hardirqs last enabled at (13639): [<ffffffff95eb2bf4>] _raw_spin_unlock_irq+0x24/0x40 hardirqs last disabled at (13640): [<ffffffff95eb2d4d>] _raw_spin_lock_irqsave+0x5d/0x60 softirqs last enabled at (13464): [<ffffffff93e26de5>] __sys_bpf+0x3e15/0x4e80 softirqs last disabled at (13462): [<ffffffff93e26da3>] __sys_bpf+0x3dd3/0x4e80 other info that might help us debug this: Possible unsafe locking scenario: CPU0 ---- lock(&qs->lock); <Interrupt> lock(&qs->lock); *** DEADLOCK *** 3 locks held by syz-executor.5/19749: #0: ffff88801904dd80 (&sb->s_type->i_mutex_key#17){++++}-{3:3}, at: path_openat+0x1585/0x2760 #1: ffff88800924c020 (&chan->lock){-.-.}-{2:2}, at: p9_virtio_request+0x18c/0x640 #2: ffffffff977d32e0 (rcu_read_lock){....}-{1:2}, at: is_bpf_text_address+0x5/0x180 stack backtrace: CPU: 0 PID: 19749 Comm: syz-executor.5 Not tainted 5.15.26+ #2 Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.13.0-1ubuntu1.1 04/01/2014 Call Trace: <NMI> dump_stack_lvl+0x9d/0xc9 lock_acquire.cold+0x3b/0x40 ? lock_release+0x6c0/0x6c0 ? __queue_map_get+0x31/0x250 ? __perf_event_header__init_id+0x2bd/0x610 ? look_up_lock_class+0x76/0xd0 ? lock_acquire+0x282/0x4b0 _raw_spin_lock_irqsave+0x48/0x60 ? __queue_map_get+0x31/0x250 __queue_map_get+0x31/0x250 bpf_prog_9e60c62721f22dfa_func+0x5a/0xc18 bpf_overflow_handler+0x17b/0x460 ? perf_output_read+0x12b0/0x12b0 ? __perf_event_account_interrupt+0xe9/0x3a0 __perf_event_overflow+0x13f/0x3c0 handle_pmi_common+0x59b/0x980 ? intel_pmu_save_and_restart+0x100/0x100 ? intel_bts_interrupt+0x10d/0x3d0 intel_pmu_handle_irq+0x28a/0x8b0 perf_event_nmi_handler+0x4d/0x70 nmi_handle+0x147/0x390 default_do_nmi+0x40/0x100 exc_nmi+0x152/0x170 end_repeat_nmi+0x16/0x55 RIP: 0010:lock_acquire+0x1b4/0x4b0 Code: f7 6a 00 45 0f b6 c9 6a 00 ff b4 24 f8 00 00 00 ff 74 24 18 e8 cd 98 ff ff b8 ff ff ff ff 48 83 c4 20 65 0f c1 05 fc 19 50 6c <83> f8 01 0f 85 7f 02 00 00 48 83 7c 24 08 00 0f 85 50 02 00 00 48 RSP: 0018:ffff88802825ec30 EFLAGS: 00000057 RAX: 0000000000000001 RBX: 1ffff1100504bd88 RCX: 00000000dea5863f RDX: 1ffff110053cd1b6 RSI: 1ffff1100504bd6f RDI: 00000000fe94d1a3 RBP: 0000000000000000 R08: 0000000000000000 R09: ffffffff99172ba7 R10: fffffbfff322e574 R11: 0000000000000001 R12: 0000000000000002 R13: 0000000000000000 R14: ffffffff977d32e0 R15: 0000000000000000 ? lock_acquire+0x1b4/0x4b0 ? lock_acquire+0x1b4/0x4b0 </NMI>