Re: [syzbot] INFO: rcu detected stall in sys_bpf (5)

From: syzbot
Date: Tue Dec 07 2021 - 08:58:32 EST


syzbot has found a reproducer for the following issue on:

HEAD commit: d5284dedccdb libbpf: Add doc comments in libbpf.h
git tree: bpf-next
console output: https://syzkaller.appspot.com/x/log.txt?x=157d0e55b00000
kernel config: https://syzkaller.appspot.com/x/.config?x=a262045c4c15a9e0
dashboard link: https://syzkaller.appspot.com/bug?extid=7caa651776c38f7fed6c
compiler: gcc (Debian 10.2.1-6) 10.2.1 20210110, GNU ld (GNU Binutils for Debian) 2.35.2
syz repro: https://syzkaller.appspot.com/x/repro.syz?x=132f9da9b00000
C reproducer: https://syzkaller.appspot.com/x/repro.c?x=11e749a9b00000

IMPORTANT: if you fix the issue, please add the following tag to the commit:
Reported-by: syzbot+7caa651776c38f7fed6c@xxxxxxxxxxxxxxxxxxxxxxxxx

hrtimer: interrupt took 34034 ns
rcu: INFO: rcu_preempt self-detected stall on CPU
rcu: 0-....: (11003 ticks this GP) idle=21b/1/0x4000000000000000 softirq=8763/8765 fqs=5250
(t=10502 jiffies g=11285 q=14)
NMI backtrace for cpu 0
CPU: 0 PID: 6526 Comm: syz-executor734 Not tainted 5.15.0-syzkaller #0
Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011
Call Trace:
<IRQ>
__dump_stack lib/dump_stack.c:88 [inline]
dump_stack_lvl+0xcd/0x134 lib/dump_stack.c:106
nmi_cpu_backtrace.cold+0x47/0x144 lib/nmi_backtrace.c:105
nmi_trigger_cpumask_backtrace+0x1ae/0x220 lib/nmi_backtrace.c:62
trigger_single_cpu_backtrace include/linux/nmi.h:164 [inline]
rcu_dump_cpu_stacks+0x25e/0x3f0 kernel/rcu/tree_stall.h:343
print_cpu_stall kernel/rcu/tree_stall.h:627 [inline]
check_cpu_stall kernel/rcu/tree_stall.h:711 [inline]
rcu_pending kernel/rcu/tree.c:3878 [inline]
rcu_sched_clock_irq.cold+0x9d/0x746 kernel/rcu/tree.c:2597
update_process_times+0x16d/0x200 kernel/time/timer.c:1785
tick_sched_handle+0x9b/0x180 kernel/time/tick-sched.c:226
tick_sched_timer+0x1b0/0x2d0 kernel/time/tick-sched.c:1421
__run_hrtimer kernel/time/hrtimer.c:1685 [inline]
__hrtimer_run_queues+0x1c0/0xe50 kernel/time/hrtimer.c:1749
hrtimer_interrupt+0x31c/0x790 kernel/time/hrtimer.c:1811
local_apic_timer_interrupt arch/x86/kernel/apic/apic.c:1086 [inline]
__sysvec_apic_timer_interrupt+0x146/0x530 arch/x86/kernel/apic/apic.c:1103
sysvec_apic_timer_interrupt+0x8e/0xc0 arch/x86/kernel/apic/apic.c:1097
</IRQ>
<TASK>
asm_sysvec_apic_timer_interrupt+0x12/0x20 arch/x86/include/asm/idtentry.h:638
RIP: 0010:htab_unlock_bucket kernel/bpf/hashtab.c:192 [inline]
RIP: 0010:htab_lru_map_update_elem+0x463/0x8c0 kernel/bpf/hashtab.c:1178
Code: 04 00 00 49 89 6d 08 e8 6b 8b ea ff 48 8b 74 24 28 48 b8 22 01 00 00 00 00 ad de 48 8b 7c 24 10 49 89 44 24 08 e8 2d f3 b0 07 <48> c7 c7 20 d4 93 89 e8 e1 23 ae 07 48 8b 54 24 18 48 b8 00 00 00
RSP: 0018:ffffc90000cd7a88 EFLAGS: 00000246
RAX: 0000000000000000 RBX: ffff88807efdc800 RCX: 0000000000000000
RDX: 0000000000000001 RSI: 0000000000000001 RDI: 0000000000000001
RBP: ffff8880218f2c00 R08: 0000000000000001 R09: 0000000000000001
R10: ffffffff817e0a58 R11: 0000000000000000 R12: ffff8880218f2c40
R13: 000000000000000b R14: 0000000000000005 R15: 0000000000000001
bpf_map_update_value.isra.0+0x2e8/0x910 kernel/bpf/syscall.c:207
generic_map_update_batch+0x3f2/0x5b0 kernel/bpf/syscall.c:1396
bpf_map_do_batch+0x3d5/0x510 kernel/bpf/syscall.c:4207
__sys_bpf+0x2761/0x5f10 kernel/bpf/syscall.c:4682
__do_sys_bpf kernel/bpf/syscall.c:4722 [inline]
__se_sys_bpf kernel/bpf/syscall.c:4720 [inline]
__x64_sys_bpf+0x75/0xb0 kernel/bpf/syscall.c:4720
do_syscall_x64 arch/x86/entry/common.c:50 [inline]
do_syscall_64+0x35/0xb0 arch/x86/entry/common.c:80
entry_SYSCALL_64_after_hwframe+0x44/0xae
RIP: 0033:0x7fa79bb49f29
Code: 28 00 00 00 75 05 48 83 c4 28 c3 e8 b1 14 00 00 90 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 c0 ff ff ff f7 d8 64 89 01 48
RSP: 002b:00007ffdbbb21d88 EFLAGS: 00000246 ORIG_RAX: 0000000000000141
RAX: ffffffffffffffda RBX: 0000000000000000 RCX: 00007fa79bb49f29
RDX: 0000000000000038 RSI: 0000000020000480 RDI: 000000000000001a
RBP: 0000000000000000 R08: 00007ffdbbb21f28 R09: 00007ffdbbb21f28
R10: 00007ffdbbb21f28 R11: 0000000000000246 R12: 00007fa79bb0d7b0
R13: 431bde82d7b634db R14: 0000000000000000 R15: 0000000000000000
</TASK>
----------------
Code disassembly (best guess):
0: 04 00 add $0x0,%al
2: 00 49 89 add %cl,-0x77(%rcx)
5: 6d insl (%dx),%es:(%rdi)
6: 08 e8 or %ch,%al
8: 6b 8b ea ff 48 8b 74 imul $0x74,-0x74b70016(%rbx),%ecx
f: 24 28 and $0x28,%al
11: 48 b8 22 01 00 00 00 movabs $0xdead000000000122,%rax
18: 00 ad de
1b: 48 8b 7c 24 10 mov 0x10(%rsp),%rdi
20: 49 89 44 24 08 mov %rax,0x8(%r12)
25: e8 2d f3 b0 07 callq 0x7b0f357
* 2a: 48 c7 c7 20 d4 93 89 mov $0xffffffff8993d420,%rdi <-- trapping instruction
31: e8 e1 23 ae 07 callq 0x7ae2417
36: 48 8b 54 24 18 mov 0x18(%rsp),%rdx
3b: 48 rex.W
3c: b8 .byte 0xb8
3d: 00 00 add %al,(%rax)