All of lore.kernel.org
 help / color / mirror / Atom feed
* [syzbot] [bpf?] [net?] possible deadlock in tick_setup_sched_timer
@ 2024-03-29 13:06 syzbot
  2024-03-29 21:43 ` Edward Adam Davis
                   ` (2 more replies)
  0 siblings, 3 replies; 6+ messages in thread
From: syzbot @ 2024-03-29 13:06 UTC (permalink / raw)
  To: andrii, ast, bpf, daniel, davem, edumazet, jakub, john.fastabend,
	kuba, linux-kernel, netdev, pabeni, syzkaller-bugs

Hello,

syzbot found the following issue on:

HEAD commit:    fe46a7dd189e Merge tag 'sound-6.9-rc1' of git://git.kernel..
git tree:       upstream
console+strace: https://syzkaller.appspot.com/x/log.txt?x=169feab1180000
kernel config:  https://syzkaller.appspot.com/x/.config?x=aef2a55903e5791c
dashboard link: https://syzkaller.appspot.com/bug?extid=e4374f6c021d422de3d1
compiler:       gcc (Debian 12.2.0-14) 12.2.0, GNU ld (GNU Binutils for Debian) 2.40
syz repro:      https://syzkaller.appspot.com/x/repro.syz?x=1422aeb1180000
C reproducer:   https://syzkaller.appspot.com/x/repro.c?x=17103c51180000

Downloadable assets:
disk image: https://storage.googleapis.com/syzbot-assets/089e25869df5/disk-fe46a7dd.raw.xz
vmlinux: https://storage.googleapis.com/syzbot-assets/423b1787914f/vmlinux-fe46a7dd.xz
kernel image: https://storage.googleapis.com/syzbot-assets/4c043e30c07d/bzImage-fe46a7dd.xz

IMPORTANT: if you fix the issue, please add the following tag to the commit:
Reported-by: syzbot+e4374f6c021d422de3d1@syzkaller.appspotmail.com

=====================================================
WARNING: HARDIRQ-safe -> HARDIRQ-unsafe lock order detected
6.8.0-syzkaller-08951-gfe46a7dd189e #0 Not tainted
-----------------------------------------------------
swapper/0/0 [HC0[0]:SC1[3]:HE0:SE0] is trying to acquire:
ffffc900036083e0 (&htab->buckets[i].lock){+.-.}-{2:2}, at: spin_lock_bh include/linux/spinlock.h:356 [inline]
ffffc900036083e0 (&htab->buckets[i].lock){+.-.}-{2:2}, at: sock_hash_delete_elem+0xcb/0x260 net/core/sock_map.c:939

and this task is already holding:
ffff8880b943d5d8 (&pool->lock){-.-.}-{2:2}, at: __queue_work+0x38e/0x1170 kernel/workqueue.c:2357
which would create a new lock dependency:
 (&pool->lock){-.-.}-{2:2} -> (&htab->buckets[i].lock){+.-.}-{2:2}

but this new dependency connects a HARDIRQ-irq-safe lock:
 (&pool->lock){-.-.}-{2:2}

... which became HARDIRQ-irq-safe at:
  lock_acquire kernel/locking/lockdep.c:5754 [inline]
  lock_acquire+0x1b1/0x540 kernel/locking/lockdep.c:5719
  __raw_spin_lock include/linux/spinlock_api_smp.h:133 [inline]
  _raw_spin_lock+0x2e/0x40 kernel/locking/spinlock.c:154
  __queue_work+0x39e/0x1170 kernel/workqueue.c:2360
  queue_work_on+0xf4/0x120 kernel/workqueue.c:2435
  tick_nohz_activate kernel/time/tick-sched.c:1491 [inline]
  tick_setup_sched_timer+0x47c/0x790 kernel/time/tick-sched.c:1592
  hrtimer_switch_to_hres kernel/time/hrtimer.c:750 [inline]
  hrtimer_run_queues+0x33c/0x450 kernel/time/hrtimer.c:1918
  run_local_timers kernel/time/timer.c:2453 [inline]
  update_process_times+0xcf/0x220 kernel/time/timer.c:2475
  tick_periodic+0x7e/0x230 kernel/time/tick-common.c:100
  tick_handle_periodic+0x45/0x120 kernel/time/tick-common.c:112
  local_apic_timer_interrupt arch/x86/kernel/apic/apic.c:1032 [inline]
  __sysvec_apic_timer_interrupt+0x10f/0x410 arch/x86/kernel/apic/apic.c:1049
  instr_sysvec_apic_timer_interrupt arch/x86/kernel/apic/apic.c:1043 [inline]
  sysvec_apic_timer_interrupt+0x90/0xb0 arch/x86/kernel/apic/apic.c:1043
  asm_sysvec_apic_timer_interrupt+0x1a/0x20 arch/x86/include/asm/idtentry.h:702
  console_flush_all+0xa19/0xd70 kernel/printk/printk.c:2979
  console_unlock+0xae/0x290 kernel/printk/printk.c:3042
  vprintk_emit kernel/printk/printk.c:2342 [inline]
  vprintk_emit+0x11a/0x5a0 kernel/printk/printk.c:2297
  vprintk+0x7f/0xa0 kernel/printk/printk_safe.c:45
  _printk+0xc8/0x100 kernel/printk/printk.c:2367
  __clocksource_select+0x33f/0x400 kernel/time/clocksource.c:1046
  clocksource_select kernel/time/clocksource.c:1061 [inline]
  clocksource_done_booting+0x39/0x50 kernel/time/clocksource.c:1085
  do_one_initcall+0x128/0x690 init/main.c:1241
  do_initcall_level init/main.c:1303 [inline]
  do_initcalls init/main.c:1319 [inline]
  do_basic_setup init/main.c:1338 [inline]
  kernel_init_freeable+0x69d/0xc40 init/main.c:1550
  kernel_init+0x1c/0x2a0 init/main.c:1439
  ret_from_fork+0x45/0x80 arch/x86/kernel/process.c:147
  ret_from_fork_asm+0x1a/0x30 arch/x86/entry/entry_64.S:243

to a HARDIRQ-irq-unsafe lock:
 (&htab->buckets[i].lock){+.-.}-{2:2}

... which became HARDIRQ-irq-unsafe at:
...
  lock_acquire kernel/locking/lockdep.c:5754 [inline]
  lock_acquire+0x1b1/0x540 kernel/locking/lockdep.c:5719
  __raw_spin_lock_bh include/linux/spinlock_api_smp.h:126 [inline]
  _raw_spin_lock_bh+0x33/0x40 kernel/locking/spinlock.c:178
  spin_lock_bh include/linux/spinlock.h:356 [inline]
  sock_hash_free+0x130/0x820 net/core/sock_map.c:1154
  bpf_map_free_deferred+0x1ce/0x420 kernel/bpf/syscall.c:734
  process_one_work+0x9a9/0x1a60 kernel/workqueue.c:3254
  process_scheduled_works kernel/workqueue.c:3335 [inline]
  worker_thread+0x6c8/0xf70 kernel/workqueue.c:3416
  kthread+0x2c1/0x3a0 kernel/kthread.c:388
  ret_from_fork+0x45/0x80 arch/x86/kernel/process.c:147
  ret_from_fork_asm+0x1a/0x30 arch/x86/entry/entry_64.S:243

other info that might help us debug this:

 Possible interrupt unsafe locking scenario:

       CPU0                    CPU1
       ----                    ----
  lock(&htab->buckets[i].lock);
                               local_irq_disable();
                               lock(&pool->lock);
                               lock(&htab->buckets[i].lock);
  <Interrupt>
    lock(&pool->lock);

 *** DEADLOCK ***

4 locks held by swapper/0/0:
 #0: ffffc90000007cb0 (&(&krcp->monitor_work)->timer){..-.}-{0:0}, at: call_timer_fn+0x11a/0x5b0 kernel/time/timer.c:1789
 #1: ffffffff8d7b08e0 (rcu_read_lock){....}-{1:2}, at: rcu_lock_acquire include/linux/rcupdate.h:298 [inline]
 #1: ffffffff8d7b08e0 (rcu_read_lock){....}-{1:2}, at: rcu_read_lock include/linux/rcupdate.h:750 [inline]
 #1: ffffffff8d7b08e0 (rcu_read_lock){....}-{1:2}, at: __queue_work+0xf2/0x1170 kernel/workqueue.c:2324
 #2: ffff8880b943d5d8 (&pool->lock){-.-.}-{2:2}, at: __queue_work+0x38e/0x1170 kernel/workqueue.c:2357
 #3: ffffffff8d7b08e0 (rcu_read_lock){....}-{1:2}, at: rcu_lock_acquire include/linux/rcupdate.h:298 [inline]
 #3: ffffffff8d7b08e0 (rcu_read_lock){....}-{1:2}, at: rcu_read_lock include/linux/rcupdate.h:750 [inline]
 #3: ffffffff8d7b08e0 (rcu_read_lock){....}-{1:2}, at: __bpf_trace_run kernel/trace/bpf_trace.c:2380 [inline]
 #3: ffffffff8d7b08e0 (rcu_read_lock){....}-{1:2}, at: bpf_trace_run1+0xdc/0x410 kernel/trace/bpf_trace.c:2419

the dependencies between HARDIRQ-irq-safe lock and the holding lock:
-> (&pool->lock){-.-.}-{2:2} {
   IN-HARDIRQ-W at:
                    lock_acquire kernel/locking/lockdep.c:5754 [inline]
                    lock_acquire+0x1b1/0x540 kernel/locking/lockdep.c:5719
                    __raw_spin_lock include/linux/spinlock_api_smp.h:133 [inline]
                    _raw_spin_lock+0x2e/0x40 kernel/locking/spinlock.c:154
                    __queue_work+0x39e/0x1170 kernel/workqueue.c:2360
                    queue_work_on+0xf4/0x120 kernel/workqueue.c:2435
                    tick_nohz_activate kernel/time/tick-sched.c:1491 [inline]
                    tick_setup_sched_timer+0x47c/0x790 kernel/time/tick-sched.c:1592
                    hrtimer_switch_to_hres kernel/time/hrtimer.c:750 [inline]
                    hrtimer_run_queues+0x33c/0x450 kernel/time/hrtimer.c:1918
                    run_local_timers kernel/time/timer.c:2453 [inline]
                    update_process_times+0xcf/0x220 kernel/time/timer.c:2475
                    tick_periodic+0x7e/0x230 kernel/time/tick-common.c:100
                    tick_handle_periodic+0x45/0x120 kernel/time/tick-common.c:112
                    local_apic_timer_interrupt arch/x86/kernel/apic/apic.c:1032 [inline]
                    __sysvec_apic_timer_interrupt+0x10f/0x410 arch/x86/kernel/apic/apic.c:1049
                    instr_sysvec_apic_timer_interrupt arch/x86/kernel/apic/apic.c:1043 [inline]
                    sysvec_apic_timer_interrupt+0x90/0xb0 arch/x86/kernel/apic/apic.c:1043
                    asm_sysvec_apic_timer_interrupt+0x1a/0x20 arch/x86/include/asm/idtentry.h:702
                    console_flush_all+0xa19/0xd70 kernel/printk/printk.c:2979
                    console_unlock+0xae/0x290 kernel/printk/printk.c:3042
                    vprintk_emit kernel/printk/printk.c:2342 [inline]
                    vprintk_emit+0x11a/0x5a0 kernel/printk/printk.c:2297
                    vprintk+0x7f/0xa0 kernel/printk/printk_safe.c:45
                    _printk+0xc8/0x100 kernel/printk/printk.c:2367
                    __clocksource_select+0x33f/0x400 kernel/time/clocksource.c:1046
                    clocksource_select kernel/time/clocksource.c:1061 [inline]
                    clocksource_done_booting+0x39/0x50 kernel/time/clocksource.c:1085
                    do_one_initcall+0x128/0x690 init/main.c:1241
                    do_initcall_level init/main.c:1303 [inline]
                    do_initcalls init/main.c:1319 [inline]
                    do_basic_setup init/main.c:1338 [inline]
                    kernel_init_freeable+0x69d/0xc40 init/main.c:1550
                    kernel_init+0x1c/0x2a0 init/main.c:1439
                    ret_from_fork+0x45/0x80 arch/x86/kernel/process.c:147
                    ret_from_fork_asm+0x1a/0x30 arch/x86/entry/entry_64.S:243
   IN-SOFTIRQ-W at:
                    lock_acquire kernel/locking/lockdep.c:5754 [inline]
                    lock_acquire+0x1b1/0x540 kernel/locking/lockdep.c:5719
                    __raw_spin_lock include/linux/spinlock_api_smp.h:133 [inline]
                    _raw_spin_lock+0x2e/0x40 kernel/locking/spinlock.c:154
                    __queue_work+0x39e/0x1170 kernel/workqueue.c:2360
                    call_timer_fn+0x1a0/0x5b0 kernel/time/timer.c:1792
                    expire_timers kernel/time/timer.c:1838 [inline]
                    __run_timers+0x567/0xab0 kernel/time/timer.c:2408
                    __run_timer_base kernel/time/timer.c:2419 [inline]
                    __run_timer_base kernel/time/timer.c:2412 [inline]
                    run_timer_base+0x111/0x190 kernel/time/timer.c:2428
                    run_timer_softirq+0x1a/0x40 kernel/time/timer.c:2438
                    __do_softirq+0x218/0x8de kernel/softirq.c:554
                    invoke_softirq kernel/softirq.c:428 [inline]
                    __irq_exit_rcu kernel/softirq.c:633 [inline]
                    irq_exit_rcu+0xb9/0x120 kernel/softirq.c:645
                    instr_sysvec_apic_timer_interrupt arch/x86/kernel/apic/apic.c:1043 [inline]
                    sysvec_apic_timer_interrupt+0x95/0xb0 arch/x86/kernel/apic/apic.c:1043
                    asm_sysvec_apic_timer_interrupt+0x1a/0x20 arch/x86/include/asm/idtentry.h:702
                    native_safe_halt arch/x86/include/asm/irqflags.h:48 [inline]
                    arch_safe_halt arch/x86/include/asm/irqflags.h:86 [inline]
                    default_idle+0xf/0x20 arch/x86/kernel/process.c:742
                    default_idle_call+0x6d/0xb0 kernel/sched/idle.c:117
                    cpuidle_idle_call kernel/sched/idle.c:191 [inline]
                    do_idle+0x32c/0x3f0 kernel/sched/idle.c:332
                    cpu_startup_entry+0x4f/0x60 kernel/sched/idle.c:430
                    rest_init+0x16f/0x2b0 init/main.c:730
                    arch_call_rest_init+0x13/0x40 init/main.c:831
                    start_kernel+0x3a3/0x490 init/main.c:1077
                    x86_64_start_reservations+0x18/0x30 arch/x86/kernel/head64.c:509
                    x86_64_start_kernel+0xb2/0xc0 arch/x86/kernel/head64.c:490
                    common_startup_64+0x13e/0x148
   INITIAL USE at:
                   lock_acquire kernel/locking/lockdep.c:5754 [inline]
                   lock_acquire+0x1b1/0x540 kernel/locking/lockdep.c:5719
                   __raw_spin_lock include/linux/spinlock_api_smp.h:133 [inline]
                   _raw_spin_lock+0x2e/0x40 kernel/locking/spinlock.c:154
                   __queue_work+0x39e/0x1170 kernel/workqueue.c:2360
                   queue_work_on+0xf4/0x120 kernel/workqueue.c:2435
                   queue_work include/linux/workqueue.h:605 [inline]
                   start_poll_synchronize_rcu_expedited+0x147/0x180 kernel/rcu/tree_exp.h:1017
                   rcu_init+0x1625/0x20c0 kernel/rcu/tree.c:5240
                   start_kernel+0x19e/0x490 init/main.c:969
                   x86_64_start_reservations+0x18/0x30 arch/x86/kernel/head64.c:509
                   x86_64_start_kernel+0xb2/0xc0 arch/x86/kernel/head64.c:490
                   common_startup_64+0x13e/0x148
 }
 ... key      at: [<ffffffff929d9de0>] __key.17+0x0/0x40

the dependencies between the lock to be acquired
 and HARDIRQ-irq-unsafe lock:
-> (&htab->buckets[i].lock){+.-.}-{2:2} {
   HARDIRQ-ON-W at:
                    lock_acquire kernel/locking/lockdep.c:5754 [inline]
                    lock_acquire+0x1b1/0x540 kernel/locking/lockdep.c:5719
                    __raw_spin_lock_bh include/linux/spinlock_api_smp.h:126 [inline]
                    _raw_spin_lock_bh+0x33/0x40 kernel/locking/spinlock.c:178
                    spin_lock_bh include/linux/spinlock.h:356 [inline]
                    sock_hash_free+0x130/0x820 net/core/sock_map.c:1154
                    bpf_map_free_deferred+0x1ce/0x420 kernel/bpf/syscall.c:734
                    process_one_work+0x9a9/0x1a60 kernel/workqueue.c:3254
                    process_scheduled_works kernel/workqueue.c:3335 [inline]
                    worker_thread+0x6c8/0xf70 kernel/workqueue.c:3416
                    kthread+0x2c1/0x3a0 kernel/kthread.c:388
                    ret_from_fork+0x45/0x80 arch/x86/kernel/process.c:147
                    ret_from_fork_asm+0x1a/0x30 arch/x86/entry/entry_64.S:243
   IN-SOFTIRQ-W at:
                    lock_acquire kernel/locking/lockdep.c:5754 [inline]
                    lock_acquire+0x1b1/0x540 kernel/locking/lockdep.c:5719
                    __raw_spin_lock_bh include/linux/spinlock_api_smp.h:126 [inline]
                    _raw_spin_lock_bh+0x33/0x40 kernel/locking/spinlock.c:178
                    spin_lock_bh include/linux/spinlock.h:356 [inline]
                    sock_hash_delete_elem+0xcb/0x260 net/core/sock_map.c:939
                    ___bpf_prog_run+0x3e51/0xae80 kernel/bpf/core.c:1997
                    __bpf_prog_run32+0xc1/0x100 kernel/bpf/core.c:2236
                    bpf_dispatcher_nop_func include/linux/bpf.h:1234 [inline]
                    __bpf_prog_run include/linux/filter.h:657 [inline]
                    bpf_prog_run include/linux/filter.h:664 [inline]
                    __bpf_trace_run kernel/trace/bpf_trace.c:2381 [inline]
                    bpf_trace_run1+0x149/0x410 kernel/trace/bpf_trace.c:2419
                    __bpf_trace_workqueue_activate_work+0x98/0xd0 include/trace/events/workqueue.h:59
                    trace_workqueue_activate_work include/trace/events/workqueue.h:59 [inline]
                    __queue_work+0xd0d/0x1170 kernel/workqueue.c:2399
                    call_timer_fn+0x1a0/0x5b0 kernel/time/timer.c:1792
                    expire_timers kernel/time/timer.c:1838 [inline]
                    __run_timers+0x567/0xab0 kernel/time/timer.c:2408
                    __run_timer_base kernel/time/timer.c:2419 [inline]
                    __run_timer_base kernel/time/timer.c:2412 [inline]
                    run_timer_base+0x111/0x190 kernel/time/timer.c:2428
                    run_timer_softirq+0x1a/0x40 kernel/time/timer.c:2438
                    __do_softirq+0x218/0x8de kernel/softirq.c:554
                    invoke_softirq kernel/softirq.c:428 [inline]
                    __irq_exit_rcu kernel/softirq.c:633 [inline]
                    irq_exit_rcu+0xb9/0x120 kernel/softirq.c:645
                    instr_sysvec_apic_timer_interrupt arch/x86/kernel/apic/apic.c:1043 [inline]
                    sysvec_apic_timer_interrupt+0x95/0xb0 arch/x86/kernel/apic/apic.c:1043
                    asm_sysvec_apic_timer_interrupt+0x1a/0x20 arch/x86/include/asm/idtentry.h:702
                    native_safe_halt arch/x86/include/asm/irqflags.h:48 [inline]
                    arch_safe_halt arch/x86/include/asm/irqflags.h:86 [inline]
                    acpi_safe_halt+0x1a/0x20 drivers/acpi/processor_idle.c:112
                    acpi_idle_enter+0xc5/0x160 drivers/acpi/processor_idle.c:707
                    cpuidle_enter_state+0x85/0x510 drivers/cpuidle/cpuidle.c:267
                    cpuidle_enter+0x4e/0xa0 drivers/cpuidle/cpuidle.c:388
                    cpuidle_idle_call kernel/sched/idle.c:236 [inline]
                    do_idle+0x313/0x3f0 kernel/sched/idle.c:332
                    cpu_startup_entry+0x4f/0x60 kernel/sched/idle.c:430
                    rest_init+0x16f/0x2b0 init/main.c:730
                    arch_call_rest_init+0x13/0x40 init/main.c:831
                    start_kernel+0x3a3/0x490 init/main.c:1077
                    x86_64_start_reservations+0x18/0x30 arch/x86/kernel/head64.c:509
                    x86_64_start_kernel+0xb2/0xc0 arch/x86/kernel/head64.c:490
                    common_startup_64+0x13e/0x148
   INITIAL USE at:
                   lock_acquire kernel/locking/lockdep.c:5754 [inline]
                   lock_acquire+0x1b1/0x540 kernel/locking/lockdep.c:5719
                   __raw_spin_lock_bh include/linux/spinlock_api_smp.h:126 [inline]
                   _raw_spin_lock_bh+0x33/0x40 kernel/locking/spinlock.c:178
                   spin_lock_bh include/linux/spinlock.h:356 [inline]
                   sock_hash_free+0x130/0x820 net/core/sock_map.c:1154
                   bpf_map_free_deferred+0x1ce/0x420 kernel/bpf/syscall.c:734
                   process_one_work+0x9a9/0x1a60 kernel/workqueue.c:3254
                   process_scheduled_works kernel/workqueue.c:3335 [inline]
                   worker_thread+0x6c8/0xf70 kernel/workqueue.c:3416
                   kthread+0x2c1/0x3a0 kernel/kthread.c:388
                   ret_from_fork+0x45/0x80 arch/x86/kernel/process.c:147
                   ret_from_fork_asm+0x1a/0x30 arch/x86/entry/entry_64.S:243
 }
 ... key      at: [<ffffffff949c67c0>] __key.0+0x0/0x40
 ... acquired at:
   lock_acquire kernel/locking/lockdep.c:5754 [inline]
   lock_acquire+0x1b1/0x540 kernel/locking/lockdep.c:5719
   __raw_spin_lock_bh include/linux/spinlock_api_smp.h:126 [inline]
   _raw_spin_lock_bh+0x33/0x40 kernel/locking/spinlock.c:178
   spin_lock_bh include/linux/spinlock.h:356 [inline]
   sock_hash_delete_elem+0xcb/0x260 net/core/sock_map.c:939
   ___bpf_prog_run+0x3e51/0xae80 kernel/bpf/core.c:1997
   __bpf_prog_run32+0xc1/0x100 kernel/bpf/core.c:2236
   bpf_dispatcher_nop_func include/linux/bpf.h:1234 [inline]
   __bpf_prog_run include/linux/filter.h:657 [inline]
   bpf_prog_run include/linux/filter.h:664 [inline]
   __bpf_trace_run kernel/trace/bpf_trace.c:2381 [inline]
   bpf_trace_run1+0x149/0x410 kernel/trace/bpf_trace.c:2419
   __bpf_trace_workqueue_activate_work+0x98/0xd0 include/trace/events/workqueue.h:59
   trace_workqueue_activate_work include/trace/events/workqueue.h:59 [inline]
   __queue_work+0xd0d/0x1170 kernel/workqueue.c:2399
   call_timer_fn+0x1a0/0x5b0 kernel/time/timer.c:1792
   expire_timers kernel/time/timer.c:1838 [inline]
   __run_timers+0x567/0xab0 kernel/time/timer.c:2408
   __run_timer_base kernel/time/timer.c:2419 [inline]
   __run_timer_base kernel/time/timer.c:2412 [inline]
   run_timer_base+0x111/0x190 kernel/time/timer.c:2428
   run_timer_softirq+0x1a/0x40 kernel/time/timer.c:2438
   __do_softirq+0x218/0x8de kernel/softirq.c:554
   invoke_softirq kernel/softirq.c:428 [inline]
   __irq_exit_rcu kernel/softirq.c:633 [inline]
   irq_exit_rcu+0xb9/0x120 kernel/softirq.c:645
   instr_sysvec_apic_timer_interrupt arch/x86/kernel/apic/apic.c:1043 [inline]
   sysvec_apic_timer_interrupt+0x95/0xb0 arch/x86/kernel/apic/apic.c:1043
   asm_sysvec_apic_timer_interrupt+0x1a/0x20 arch/x86/include/asm/idtentry.h:702
   native_safe_halt arch/x86/include/asm/irqflags.h:48 [inline]
   arch_safe_halt arch/x86/include/asm/irqflags.h:86 [inline]
   acpi_safe_halt+0x1a/0x20 drivers/acpi/processor_idle.c:112
   acpi_idle_enter+0xc5/0x160 drivers/acpi/processor_idle.c:707
   cpuidle_enter_state+0x85/0x510 drivers/cpuidle/cpuidle.c:267
   cpuidle_enter+0x4e/0xa0 drivers/cpuidle/cpuidle.c:388
   cpuidle_idle_call kernel/sched/idle.c:236 [inline]
   do_idle+0x313/0x3f0 kernel/sched/idle.c:332
   cpu_startup_entry+0x4f/0x60 kernel/sched/idle.c:430
   rest_init+0x16f/0x2b0 init/main.c:730
   arch_call_rest_init+0x13/0x40 init/main.c:831
   start_kernel+0x3a3/0x490 init/main.c:1077
   x86_64_start_reservations+0x18/0x30 arch/x86/kernel/head64.c:509
   x86_64_start_kernel+0xb2/0xc0 arch/x86/kernel/head64.c:490
   common_startup_64+0x13e/0x148


stack backtrace:
CPU: 0 PID: 0 Comm: swapper/0 Not tainted 6.8.0-syzkaller-08951-gfe46a7dd189e #0
Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 03/27/2024
Call Trace:
 <IRQ>
 __dump_stack lib/dump_stack.c:88 [inline]
 dump_stack_lvl+0x116/0x1f0 lib/dump_stack.c:114
 print_bad_irq_dependency kernel/locking/lockdep.c:2626 [inline]
 check_irq_usage+0xe3c/0x1490 kernel/locking/lockdep.c:2865
 check_prev_add kernel/locking/lockdep.c:3138 [inline]
 check_prevs_add kernel/locking/lockdep.c:3253 [inline]
 validate_chain kernel/locking/lockdep.c:3869 [inline]
 __lock_acquire+0x248e/0x3b30 kernel/locking/lockdep.c:5137
 lock_acquire kernel/locking/lockdep.c:5754 [inline]
 lock_acquire+0x1b1/0x540 kernel/locking/lockdep.c:5719
 __raw_spin_lock_bh include/linux/spinlock_api_smp.h:126 [inline]
 _raw_spin_lock_bh+0x33/0x40 kernel/locking/spinlock.c:178
 spin_lock_bh include/linux/spinlock.h:356 [inline]
 sock_hash_delete_elem+0xcb/0x260 net/core/sock_map.c:939
 ___bpf_prog_run+0x3e51/0xae80 kernel/bpf/core.c:1997
 __bpf_prog_run32+0xc1/0x100 kernel/bpf/core.c:2236
 bpf_dispatcher_nop_func include/linux/bpf.h:1234 [inline]
 __bpf_prog_run include/linux/filter.h:657 [inline]
 bpf_prog_run include/linux/filter.h:664 [inline]
 __bpf_trace_run kernel/trace/bpf_trace.c:2381 [inline]
 bpf_trace_run1+0x149/0x410 kernel/trace/bpf_trace.c:2419
 __bpf_trace_workqueue_activate_work+0x98/0xd0 include/trace/events/workqueue.h:59
 trace_workqueue_activate_work include/trace/events/workqueue.h:59 [inline]
 __queue_work+0xd0d/0x1170 kernel/workqueue.c:2399
 call_timer_fn+0x1a0/0x5b0 kernel/time/timer.c:1792
 expire_timers kernel/time/timer.c:1838 [inline]
 __run_timers+0x567/0xab0 kernel/time/timer.c:2408
 __run_timer_base kernel/time/timer.c:2419 [inline]
 __run_timer_base kernel/time/timer.c:2412 [inline]
 run_timer_base+0x111/0x190 kernel/time/timer.c:2428
 run_timer_softirq+0x1a/0x40 kernel/time/timer.c:2438
 __do_softirq+0x218/0x8de kernel/softirq.c:554
 invoke_softirq kernel/softirq.c:428 [inline]
 __irq_exit_rcu kernel/softirq.c:633 [inline]
 irq_exit_rcu+0xb9/0x120 kernel/softirq.c:645
 instr_sysvec_apic_timer_interrupt arch/x86/kernel/apic/apic.c:1043 [inline]
 sysvec_apic_timer_interrupt+0x95/0xb0 arch/x86/kernel/apic/apic.c:1043
 </IRQ>
 <TASK>
 asm_sysvec_apic_timer_interrupt+0x1a/0x20 arch/x86/include/asm/idtentry.h:702
RIP: 0010:native_irq_disable arch/x86/include/asm/irqflags.h:37 [inline]
RIP: 0010:arch_local_irq_disable arch/x86/include/asm/irqflags.h:72 [inline]
RIP: 0010:acpi_safe_halt+0x1a/0x20 drivers/acpi/processor_idle.c:113
Code: 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 65 48 8b 05 d8 60 31 75 48 8b 00 a8 08 75 0c 66 90 0f 00 2d c8 73 a7 00 fb f4 <fa> c3 cc cc cc cc 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90
RSP: 0018:ffffffff8d407d68 EFLAGS: 00000246
RAX: 0000000000004000 RBX: 0000000000000001 RCX: ffffffff8ad255f9
RDX: 0000000000000001 RSI: ffff88801bab8000 RDI: ffff88801bab8064
RBP: ffff88801bab8064 R08: 0000000000000001 R09: ffffed1017286fdd
R10: ffff8880b9437eeb R11: 0000000000000000 R12: ffff8880173d4800
R13: ffffffff8e31fbc0 R14: 0000000000000000 R15: 0000000000000000
 acpi_idle_enter+0xc5/0x160 drivers/acpi/processor_idle.c:707
 cpuidle_enter_state+0x85/0x510 drivers/cpuidle/cpuidle.c:267
 cpuidle_enter+0x4e/0xa0 drivers/cpuidle/cpuidle.c:388
 cpuidle_idle_call kernel/sched/idle.c:236 [inline]
 do_idle+0x313/0x3f0 kernel/sched/idle.c:332
 cpu_startup_entry+0x4f/0x60 kernel/sched/idle.c:430
 rest_init+0x16f/0x2b0 init/main.c:730
 arch_call_rest_init+0x13/0x40 init/main.c:831
 start_kernel+0x3a3/0x490 init/main.c:1077
 x86_64_start_reservations+0x18/0x30 arch/x86/kernel/head64.c:509
 x86_64_start_kernel+0xb2/0xc0 arch/x86/kernel/head64.c:490
 common_startup_64+0x13e/0x148
 </TASK>
----------------
Code disassembly (best guess):
   0:	90                   	nop
   1:	90                   	nop
   2:	90                   	nop
   3:	90                   	nop
   4:	90                   	nop
   5:	90                   	nop
   6:	90                   	nop
   7:	90                   	nop
   8:	90                   	nop
   9:	90                   	nop
   a:	90                   	nop
   b:	90                   	nop
   c:	90                   	nop
   d:	90                   	nop
   e:	90                   	nop
   f:	90                   	nop
  10:	65 48 8b 05 d8 60 31 	mov    %gs:0x753160d8(%rip),%rax        # 0x753160f0
  17:	75
  18:	48 8b 00             	mov    (%rax),%rax
  1b:	a8 08                	test   $0x8,%al
  1d:	75 0c                	jne    0x2b
  1f:	66 90                	xchg   %ax,%ax
  21:	0f 00 2d c8 73 a7 00 	verw   0xa773c8(%rip)        # 0xa773f0
  28:	fb                   	sti
  29:	f4                   	hlt
* 2a:	fa                   	cli <-- trapping instruction
  2b:	c3                   	ret
  2c:	cc                   	int3
  2d:	cc                   	int3
  2e:	cc                   	int3
  2f:	cc                   	int3
  30:	90                   	nop
  31:	90                   	nop
  32:	90                   	nop
  33:	90                   	nop
  34:	90                   	nop
  35:	90                   	nop
  36:	90                   	nop
  37:	90                   	nop
  38:	90                   	nop
  39:	90                   	nop
  3a:	90                   	nop
  3b:	90                   	nop
  3c:	90                   	nop
  3d:	90                   	nop
  3e:	90                   	nop
  3f:	90                   	nop


---
This report is generated by a bot. It may contain errors.
See https://goo.gl/tpsmEJ for more information about syzbot.
syzbot engineers can be reached at syzkaller@googlegroups.com.

syzbot will keep track of this issue. See:
https://goo.gl/tpsmEJ#status for how to communicate with syzbot.

If the report is already addressed, let syzbot know by replying with:
#syz fix: exact-commit-title

If you want syzbot to run the reproducer, reply with:
#syz test: git://repo/address.git branch-or-commit-hash
If you attach or paste a git patch, syzbot will apply it before testing.

If you want to overwrite report's subsystems, reply with:
#syz set subsystems: new-subsystem
(See the list of subsystem names on the web dashboard)

If the report is a duplicate of another one, reply with:
#syz dup: exact-subject-of-another-report

If you want to undo deduplication, reply with:
#syz undup

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [syzbot] [bpf?] [net?] possible deadlock in tick_setup_sched_timer
  2024-03-29 13:06 [syzbot] [bpf?] [net?] possible deadlock in tick_setup_sched_timer syzbot
@ 2024-03-29 21:43 ` Edward Adam Davis
  2024-03-30  8:58   ` syzbot
  2024-03-30 10:23 ` Edward Adam Davis
  2024-04-02  9:02 ` Jakub Sitnicki
  2 siblings, 1 reply; 6+ messages in thread
From: Edward Adam Davis @ 2024-03-29 21:43 UTC (permalink / raw)
  To: syzbot+e4374f6c021d422de3d1; +Cc: linux-kernel, syzkaller-bugs

please test dl in tick_setup_sched_timer

#syz test https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master

diff --git a/net/core/sock_map.c b/net/core/sock_map.c
index 27d733c0f65e..ae8f81b26e16 100644
--- a/net/core/sock_map.c
+++ b/net/core/sock_map.c
@@ -932,11 +932,12 @@ static long sock_hash_delete_elem(struct bpf_map *map, void *key)
 	struct bpf_shtab_bucket *bucket;
 	struct bpf_shtab_elem *elem;
 	int ret = -ENOENT;
+	unsigned long flags;
 
 	hash = sock_hash_bucket_hash(key, key_size);
 	bucket = sock_hash_select_bucket(htab, hash);
 
-	spin_lock_bh(&bucket->lock);
+	spin_lock_irqsave(&bucket->lock, flags);
 	elem = sock_hash_lookup_elem_raw(&bucket->head, hash, key, key_size);
 	if (elem) {
 		hlist_del_rcu(&elem->node);
@@ -944,7 +945,7 @@ static long sock_hash_delete_elem(struct bpf_map *map, void *key)
 		sock_hash_free_elem(htab, elem);
 		ret = 0;
 	}
-	spin_unlock_bh(&bucket->lock);
+	spin_unlock_irqrestore(&bucket->lock, flags);
 	return ret;
 }
 
@@ -1136,6 +1137,7 @@ static void sock_hash_free(struct bpf_map *map)
 	struct bpf_shtab_elem *elem;
 	struct hlist_node *node;
 	int i;
+	unsigned long flags;
 
 	/* After the sync no updates or deletes will be in-flight so it
 	 * is safe to walk map and remove entries without risking a race
@@ -1151,11 +1153,11 @@ static void sock_hash_free(struct bpf_map *map)
 		 * exists, psock exists and holds a ref to socket. That
 		 * lets us to grab a socket ref too.
 		 */
-		spin_lock_bh(&bucket->lock);
+		spin_lock_irqsave(&bucket->lock, flags);
 		hlist_for_each_entry(elem, &bucket->head, node)
 			sock_hold(elem->sk);
 		hlist_move_list(&bucket->head, &unlink_list);
-		spin_unlock_bh(&bucket->lock);
+		spin_unlock_irqrestore(&bucket->lock, flags);
 
 		/* Process removed entries out of atomic context to
 		 * block for socket lock before deleting the psock's


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [syzbot] [bpf?] [net?] possible deadlock in tick_setup_sched_timer
  2024-03-29 21:43 ` Edward Adam Davis
@ 2024-03-30  8:58   ` syzbot
  0 siblings, 0 replies; 6+ messages in thread
From: syzbot @ 2024-03-30  8:58 UTC (permalink / raw)
  To: eadavis, linux-kernel, syzkaller-bugs

Hello,

syzbot tried to test the proposed patch but the build/boot failed:

drm_connector registered
[   11.107844][    T1] [drm] Initialized vgem 1.0.0 20120112 for vgem on minor 0
[   11.126768][    T1] [drm] Initialized vkms 1.0.0 20180514 for vkms on minor 1
[   11.235459][    T1] Console: switching to colour frame buffer device 128x48
[   11.259808][    T1] platform vkms: [drm] fb0: vkmsdrmfb frame buffer device
[   11.267554][    T1] usbcore: registered new interface driver udl
[   11.374239][    T1] brd: module loaded
[   11.501139][    T1] loop: module loaded
[   11.677668][    T1] zram: Added device: zram0
[   11.695347][    T1] null_blk: disk nullb0 created
[   11.700275][    T1] null_blk: module loaded
[   11.706181][    T1] Guest personality initialized and is inactive
[   11.713576][    T1] VMCI host device registered (name=vmci, major=10, minor=118)
[   11.721442][    T1] Initialized host personality
[   11.726520][    T1] usbcore: registered new interface driver rtsx_usb
[   11.734397][    T1] usbcore: registered new interface driver viperboard
[   11.742268][    T1] usbcore: registered new interface driver dln2
[   11.749350][    T1] usbcore: registered new interface driver pn533_usb
[   11.763332][    T1] nfcsim 0.2 initialized
[   11.767821][    T1] usbcore: registered new interface driver port100
[   11.775500][    T1] usbcore: registered new interface driver nfcmrvl
[   11.790533][    T1] Loading iSCSI transport class v2.0-870.
[   11.814992][    T1] virtio_scsi virtio0: 1/0/0 default/read/poll queues
[   11.834309][    T1] ------------[ cut here ]------------
[   11.840069][    T1] refcount_t: decrement hit 0; leaking memory.
[   11.846833][    T1] WARNING: CPU: 1 PID: 1 at lib/refcount.c:31 refcount_warn_saturate+0x1ed/0x210
[   11.856073][    T1] Modules linked in:
[   11.860032][    T1] CPU: 1 PID: 1 Comm: swapper/0 Not tainted 6.9.0-rc1-syzkaller-g486291a0e624-dirty #0
[   11.869766][    T1] Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 03/27/2024
[   11.879854][    T1] RIP: 0010:refcount_warn_saturate+0x1ed/0x210
[   11.886039][    T1] Code: 8b e8 67 29 d2 fc 90 0f 0b 90 90 e9 c3 fe ff ff e8 58 bb 0f fd c6 05 0d eb 4c 0b 01 90 48 c7 c7 80 e5 8e 8b e8 44 29 d2 fc 90 <0f> 0b 90 90 e9 a0 fe ff ff 48 89 ef e8 72 e7 6a fd e9 44 fe ff ff
[   11.905771][    T1] RSP: 0000:ffffc900000673c0 EFLAGS: 00010286
[   11.912115][    T1] RAX: 0000000000000000 RBX: 0000000000000000 RCX: ffffffff814fe149
[   11.920354][    T1] RDX: ffff888016ec0000 RSI: ffffffff814fe156 RDI: 0000000000000001
[   11.928321][    T1] RBP: ffff888020fac3bc R08: 0000000000000001 R09: 0000000000000000
[   11.936315][    T1] R10: 0000000000000000 R11: 0000000000000001 R12: ffff888020fac3bc
[   11.944311][    T1] R13: 0000000000000000 R14: 00000000007400b9 R15: ffff888016853988
[   11.952567][    T1] FS:  0000000000000000(0000) GS:ffff8880b9300000(0000) knlGS:0000000000000000
[   11.961512][    T1] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[   11.968083][    T1] CR2: 0000000000000000 CR3: 000000000d97a000 CR4: 00000000003506f0
[   11.976181][    T1] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
[   11.984211][    T1] DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
[   11.992239][    T1] Call Trace:
[   11.995530][    T1]  <TASK>
[   11.998452][    T1]  ? show_regs+0x8c/0xa0
[   12.002745][    T1]  ? __warn+0xe5/0x3c0
[   12.006810][    T1]  ? __wake_up_klogd.part.0+0x99/0xf0
[   12.012328][    T1]  ? refcount_warn_saturate+0x1ed/0x210
[   12.017871][    T1]  ? report_bug+0x3c0/0x580
[   12.022448][    T1]  ? handle_bug+0x3d/0x70
[   12.026794][    T1]  ? exc_invalid_op+0x17/0x50
[   12.031602][    T1]  ? asm_exc_invalid_op+0x1a/0x20
[   12.036639][    T1]  ? __warn_printk+0x199/0x350
[   12.041521][    T1]  ? __warn_printk+0x1a6/0x350
[   12.046283][    T1]  ? refcount_warn_saturate+0x1ed/0x210
[   12.051884][    T1]  __reset_page_owner+0x2ea/0x370
[   12.057140][    T1]  __free_pages_ok+0x5a9/0xbf0
[   12.061993][    T1]  ? __split_page_owner+0xdd/0x120
[   12.067111][    T1]  make_alloc_exact+0x165/0x260
[   12.072448][    T1]  vring_alloc_queue+0xc1/0x110
[   12.077349][    T1]  vring_alloc_queue_split+0x186/0x510
[   12.082874][    T1]  ? __pfx_vring_alloc_queue_split+0x10/0x10
[   12.088882][    T1]  ? kasan_save_stack+0x42/0x60
[   12.093828][    T1]  ? __pfx_virtscsi_ctrl_done+0x10/0x10
[   12.099615][    T1]  vring_create_virtqueue_split+0xe8/0x280
[   12.105518][    T1]  ? __pfx_vp_notify+0x10/0x10
[   12.110328][    T1]  ? __pfx_vring_create_virtqueue_split+0x10/0x10
[   12.116731][    T1]  ? virtio_scsi_init+0x75/0x100
[   12.121740][    T1]  ? do_one_initcall+0x128/0x700
[   12.126695][    T1]  ? kernel_init_freeable+0x69d/0xca0
[   12.132157][    T1]  vring_create_virtqueue+0xd7/0x140
[   12.137433][    T1]  ? __pfx_vp_notify+0x10/0x10
[   12.142247][    T1]  ? __pfx_virtscsi_ctrl_done+0x10/0x10
[   12.148576][    T1]  setup_vq+0x123/0x2f0
[   12.152766][    T1]  ? __pfx_vp_notify+0x10/0x10
[   12.157544][    T1]  ? __pfx_virtscsi_ctrl_done+0x10/0x10
[   12.163473][    T1]  ? __pfx_virtscsi_ctrl_done+0x10/0x10
[   12.169167][    T1]  ? __pfx_virtscsi_ctrl_done+0x10/0x10
[   12.174836][    T1]  vp_setup_vq+0xb1/0x380
[   12.179545][    T1]  ? iowrite16+0x55/0x80
[   12.183910][    T1]  ? __pfx_virtscsi_ctrl_done+0x10/0x10
[   12.189632][    T1]  vp_find_vqs_msix+0x661/0xe30
[   12.194484][    T1]  vp_find_vqs+0x58/0x560
[   12.198919][    T1]  virtscsi_init+0x459/0x9f0
[   12.203694][    T1]  ? __pfx_virtscsi_init+0x10/0x10
[   12.209111][    T1]  ? __pfx_default_calc_sets+0x10/0x10
[   12.214606][    T1]  ? ioread8+0x4e/0xa0
[   12.218920][    T1]  ? vp_get+0xf6/0x140
[   12.223023][    T1]  virtscsi_probe+0x3b2/0xdd0
[   12.227732][    T1]  ? __pfx_virtscsi_probe+0x10/0x10
[   12.233079][    T1]  ? trace_raw_output_sched_pi_setprio+0xad/0x150
[   12.239751][    T1]  ? vring_transport_features+0x49/0xb0
[   12.245404][    T1]  virtio_dev_probe+0x5ff/0x9b0
[   12.250546][    T1]  ? __pfx_virtio_dev_probe+0x10/0x10
[   12.255937][    T1]  really_probe+0x23e/0xa90
[   12.260516][    T1]  __driver_probe_device+0x1de/0x440
[   12.265804][    T1]  ? _raw_spin_unlock_irqrestore+0x52/0x80
[   12.271660][    T1]  driver_probe_device+0x4c/0x1b0
[   12.276686][    T1]  __driver_attach+0x283/0x580
[   12.281478][    T1]  ? __pfx___driver_attach+0x10/0x10
[   12.286756][    T1]  bus_for_each_dev+0x13c/0x1d0
[   12.291626][    T1]  ? __pfx_bus_for_each_dev+0x10/0x10
[   12.297077][    T1]  bus_add_driver+0x2ed/0x640
[   12.301781][    T1]  driver_register+0x15c/0x4b0
[   12.306529][    T1]  ? __pfx_virtio_scsi_init+0x10/0x10
[   12.311922][    T1]  ? __pfx_virtio_scsi_init+0x10/0x10
[   12.317285][    T1]  virtio_scsi_init+0x75/0x100
[   12.322232][    T1]  do_one_initcall+0x128/0x700
[   12.327308][    T1]  ? __pfx_do_one_initcall+0x10/0x10
[   12.332699][    T1]  ? trace_kmalloc+0x2d/0xe0
[   12.337296][    T1]  ? __kmalloc+0x218/0x440
[   12.341776][    T1]  kernel_init_freeable+0x69d/0xca0
[   12.346990][    T1]  ? __pfx_kernel_init+0x10/0x10
[   12.351965][    T1]  kernel_init+0x1c/0x2b0
[   12.356292][    T1]  ? __pfx_kernel_init+0x10/0x10
[   12.361247][    T1]  ret_from_fork+0x45/0x80
[   12.365684][    T1]  ? __pfx_kernel_init+0x10/0x10
[   12.370654][    T1]  ret_from_fork_asm+0x1a/0x30
[   12.375521][    T1]  </TASK>
[   12.378535][    T1] Kernel panic - not syncing: kernel: panic_on_warn set ...
[   12.380634][    T1] CPU: 1 PID: 1 Comm: swapper/0 Not tainted 6.9.0-rc1-syzkaller-g486291a0e624-dirty #0
[   12.380634][    T1] Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 03/27/2024
[   12.380634][    T1] Call Trace:
[   12.380634][    T1]  <TASK>
[   12.380634][    T1]  dump_stack_lvl+0x3d/0x1f0
[   12.380634][    T1]  panic+0x6f5/0x7a0
[   12.380634][    T1]  ? __pfx_panic+0x10/0x10
[   12.380634][    T1]  ? show_trace_log_lvl+0x363/0x500
[   12.428930][    T1]  ? check_panic_on_warn+0x1f/0xb0
[   12.428930][    T1]  ? refcount_warn_saturate+0x1ed/0x210
[   12.428930][    T1]  check_panic_on_warn+0xab/0xb0
[   12.428930][    T1]  __warn+0xf1/0x3c0
[   12.428930][    T1]  ? __wake_up_klogd.part.0+0x99/0xf0
[   12.428930][    T1]  ? refcount_warn_saturate+0x1ed/0x210
[   12.428930][    T1]  report_bug+0x3c0/0x580
[   12.428930][    T1]  handle_bug+0x3d/0x70
[   12.428930][    T1]  exc_invalid_op+0x17/0x50
[   12.428930][    T1]  asm_exc_invalid_op+0x1a/0x20
[   12.478917][    T1] RIP: 0010:refcount_warn_saturate+0x1ed/0x210
[   12.478917][    T1] Code: 8b e8 67 29 d2 fc 90 0f 0b 90 90 e9 c3 fe ff ff e8 58 bb 0f fd c6 05 0d eb 4c 0b 01 90 48 c7 c7 80 e5 8e 8b e8 44 29 d2 fc 90 <0f> 0b 90 90 e9 a0 fe ff ff 48 89 ef e8 72 e7 6a fd e9 44 fe ff ff
[   12.478917][    T1] RSP: 0000:ffffc900000673c0 EFLAGS: 00010286
[   12.478917][    T1] RAX: 0000000000000000 RBX: 0000000000000000 RCX: ffffffff814fe149
[   12.478917][    T1] RDX: ffff888016ec0000 RSI: ffffffff814fe156 RDI: 0000000000000001
[   12.478917][    T1] RBP: ffff888020fac3bc R08: 0000000000000001 R09: 0000000000000000
[   12.528953][    T1] R10: 0000000000000000 R11: 0000000000000001 R12: ffff888020fac3bc
[   12.528953][    T1] R13: 0000000000000000 R14: 00000000007400b9 R15: ffff888016853988
[   12.528953][    T1]  ? __warn_printk+0x199/0x350
[   12.528953][    T1]  ? __warn_printk+0x1a6/0x350
[   12.528953][    T1]  __reset_page_owner+0x2ea/0x370
[   12.528953][    T1]  __free_pages_ok+0x5a9/0xbf0
[   12.528953][    T1]  ? __split_page_owner+0xdd/0x120
[   12.528953][    T1]  make_alloc_exact+0x165/0x260
[   12.579003][    T1]  vring_alloc_queue+0xc1/0x110
[   12.579003][    T1]  vring_alloc_queue_split+0x186/0x510
[   12.579003][    T1]  ? __pfx_vring_alloc_queue_split+0x10/0x10
[   12.579003][    T1]  ? kasan_save_stack+0x42/0x60
[   12.579003][    T1]  ? __pfx_virtscsi_ctrl_done+0x10/0x10
[   12.579003][    T1]  vring_create_virtqueue_split+0xe8/0x280
[   12.579003][    T1]  ? __pfx_vp_notify+0x10/0x10
[   12.579003][    T1]  ? __pfx_vring_create_virtqueue_split+0x10/0x10
[   12.579003][    T1]  ? virtio_scsi_init+0x75/0x100
[   12.628847][    T1]  ? do_one_initcall+0x128/0x700
[   12.628847][    T1]  ? kernel_init_freeable+0x69d/0xca0
[   12.628847][    T1]  vring_create_virtqueue+0xd7/0x140
[   12.628847][    T1]  ? __pfx_vp_notify+0x10/0x10
[   12.628847][    T1]  ? __pfx_virtscsi_ctrl_done+0x10/0x10
[   12.628847][    T1]  setup_vq+0x123/0x2f0
[   12.628847][    T1]  ? __pfx_vp_notify+0x10/0x10
[   12.628847][    T1]  ? __pfx_virtscsi_ctrl_done+0x10/0x10
[   12.628847][    T1]  ? __pfx_virtscsi_ctrl_done+0x10/0x10
[   12.628847][    T1]  ? __pfx_virtscsi_ctrl_done+0x10/0x10
[   12.678924][    T1]  vp_setup_vq+0xb1/0x380
[   12.678924][    T1]  ? iowrite16+0x55/0x80
[   12.678924][    T1]  ? __pfx_virtscsi_ctrl_done+0x10/0x10
[   12.678924][    T1]  vp_find_vqs_msix+0x661/0xe30
[   12.678924][    T1]  vp_find_vqs+0x58/0x560
[   12.678924][    T1]  virtscsi_init+0x459/0x9f0
[   12.678924][    T1]  ? __pfx_virtscsi_init+0x10/0x10
[   12.678924][    T1]  ? __pfx_default_calc_sets+0x10/0x10
[   12.678924][    T1]  ? ioread8+0x4e/0xa0
[   12.678924][    T1]  ? vp_get+0xf6/0x140
[   12.728908][    T1]  virtscsi_probe+0x3b2/0xdd0
[   12.728908][    T1]  ? __pfx_virtscsi_probe+0x10/0x10
[   12.728908][    T1]  ? trace_raw_output_sched_pi_setprio+0xad/0x150
[   12.728908][    T1]  ? vring_transport_features+0x49/0xb0
[   12.728908][    T1]  virtio_dev_probe+0x5ff/0x9b0
[   12.728908][    T1]  ? __pfx_virtio_dev_probe+0x10/0x10
[   12.728908][    T1]  really_probe+0x23e/0xa90
[   12.728908][    T1]  __driver_probe_device+0x1de/0x440
[   12.728908][    T1]  ? _raw_spin_unlock_irqrestore+0x52/0x80
[   12.778943][    T1]  driver_probe_device+0x4c/0x1b0
[   12.778943][    T1]  __driver_attach+0x283/0x580
[   12.778943][    T1]  ? __pfx___driver_attach+0x10/0x10
[   12.778943][    T1]  bus_for_each_dev+0x13c/0x1d0
[   12.778943][    T1]  ? __pfx_bus_for_each_dev+0x10/0x10
[   12.778943][    T1]  bus_add_driver+0x2ed/0x640
[   12.778943][    T1]  driver_register+0x15c/0x4b0
[   12.778943][    T1]  ? __pfx_virtio_scsi_init+0x10/0x10
[   12.778943][    T1]  ? __pfx_virtio_scsi_init+0x10/0x10
[   12.778943][    T1]  virtio_scsi_init+0x75/0x100
[   12.828878][    T1]  do_one_initcall+0x128/0x700
[   12.828878][    T1]  ? __pfx_do_one_initcall+0x10/0x10
[   12.828878][    T1]  ? trace_kmalloc+0x2d/0xe0
[   12.828878][    T1]  ? __kmalloc+0x218/0x440
[   12.828878][    T1]  kernel_init_freeable+0x69d/0xca0
[   12.828878][    T1]  ? __pfx_kernel_init+0x10/0x10
[   12.828878][    T1]  kernel_init+0x1c/0x2b0
[   12.828878][    T1]  ? __pfx_kernel_init+0x10/0x10
[   12.828878][    T1]  ret_from_fork+0x45/0x80
[   12.828878][    T1]  ? __pfx_kernel_init+0x10/0x10
[   12.878911][    T1]  ret_from_fork_asm+0x1a/0x30
[   12.878911][    T1]  </TASK>
[   12.878911][    T1] Kernel Offset: disabled
[   12.878911][    T1] Rebooting in 86400 seconds..


syzkaller build log:
go env (err=<nil>)
GO111MODULE='auto'
GOARCH='amd64'
GOBIN=''
GOCACHE='/syzkaller/.cache/go-build'
GOENV='/syzkaller/.config/go/env'
GOEXE=''
GOEXPERIMENT=''
GOFLAGS=''
GOHOSTARCH='amd64'
GOHOSTOS='linux'
GOINSECURE=''
GOMODCACHE='/syzkaller/jobs-2/linux/gopath/pkg/mod'
GONOPROXY=''
GONOSUMDB=''
GOOS='linux'
GOPATH='/syzkaller/jobs-2/linux/gopath'
GOPRIVATE=''
GOPROXY='https://proxy.golang.org,direct'
GOROOT='/usr/local/go'
GOSUMDB='sum.golang.org'
GOTMPDIR=''
GOTOOLCHAIN='auto'
GOTOOLDIR='/usr/local/go/pkg/tool/linux_amd64'
GOVCS=''
GOVERSION='go1.21.4'
GCCGO='gccgo'
GOAMD64='v1'
AR='ar'
CC='gcc'
CXX='g++'
CGO_ENABLED='1'
GOMOD='/syzkaller/jobs-2/linux/gopath/src/github.com/google/syzkaller/go.mod'
GOWORK=''
CGO_CFLAGS='-O2 -g'
CGO_CPPFLAGS=''
CGO_CXXFLAGS='-O2 -g'
CGO_FFLAGS='-O2 -g'
CGO_LDFLAGS='-O2 -g'
PKG_CONFIG='pkg-config'
GOGCCFLAGS='-fPIC -m64 -pthread -Wl,--no-gc-sections -fmessage-length=0 -ffile-prefix-map=/tmp/go-build3952729973=/tmp/go-build -gno-record-gcc-switches'

git status (err=<nil>)
HEAD detached at 120789fd6
nothing to commit, working tree clean


tput: No value for $TERM and no -T specified
tput: No value for $TERM and no -T specified
Makefile:31: run command via tools/syz-env for best compatibility, see:
Makefile:32: https://github.com/google/syzkaller/blob/master/docs/contributing.md#using-syz-env
go list -f '{{.Stale}}' ./sys/syz-sysgen | grep -q false || go install ./sys/syz-sysgen
make .descriptions
tput: No value for $TERM and no -T specified
tput: No value for $TERM and no -T specified
Makefile:31: run command via tools/syz-env for best compatibility, see:
Makefile:32: https://github.com/google/syzkaller/blob/master/docs/contributing.md#using-syz-env
bin/syz-sysgen
touch .descriptions
GOOS=linux GOARCH=amd64 go build "-ldflags=-s -w -X github.com/google/syzkaller/prog.GitRevision=120789fd6691dd038dbe206ceeed95be5c006364 -X 'github.com/google/syzkaller/prog.gitRevisionDate=20240327-181839'" "-tags=syz_target syz_os_linux syz_arch_amd64 " -o ./bin/linux_amd64/syz-fuzzer github.com/google/syzkaller/syz-fuzzer
GOOS=linux GOARCH=amd64 go build "-ldflags=-s -w -X github.com/google/syzkaller/prog.GitRevision=120789fd6691dd038dbe206ceeed95be5c006364 -X 'github.com/google/syzkaller/prog.gitRevisionDate=20240327-181839'" "-tags=syz_target syz_os_linux syz_arch_amd64 " -o ./bin/linux_amd64/syz-execprog github.com/google/syzkaller/tools/syz-execprog
GOOS=linux GOARCH=amd64 go build "-ldflags=-s -w -X github.com/google/syzkaller/prog.GitRevision=120789fd6691dd038dbe206ceeed95be5c006364 -X 'github.com/google/syzkaller/prog.gitRevisionDate=20240327-181839'" "-tags=syz_target syz_os_linux syz_arch_amd64 " -o ./bin/linux_amd64/syz-stress github.com/google/syzkaller/tools/syz-stress
mkdir -p ./bin/linux_amd64
gcc -o ./bin/linux_amd64/syz-executor executor/executor.cc \
	-m64 -O2 -pthread -Wall -Werror -Wparentheses -Wunused-const-variable -Wframe-larger-than=16384 -Wno-stringop-overflow -Wno-array-bounds -Wno-format-overflow -Wno-unused-but-set-variable -Wno-unused-command-line-argument -static-pie -fpermissive -w -DGOOS_linux=1 -DGOARCH_amd64=1 \
	-DHOSTGOOS_linux=1 -DGIT_REVISION=\"120789fd6691dd038dbe206ceeed95be5c006364\"


Error text is too large and was truncated, full error text is at:
https://syzkaller.appspot.com/x/error.txt?x=1464b30d180000


Tested on:

commit:         486291a0 Merge tag 'drm-fixes-2024-03-30' of https://g..
git tree:       https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
kernel config:  https://syzkaller.appspot.com/x/.config?x=f64ec427e98bccd7
dashboard link: https://syzkaller.appspot.com/bug?extid=e4374f6c021d422de3d1
compiler:       gcc (Debian 12.2.0-14) 12.2.0, GNU ld (GNU Binutils for Debian) 2.40
patch:          https://syzkaller.appspot.com/x/patch.diff?x=16783ae5180000


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [syzbot] [bpf?] [net?] possible deadlock in tick_setup_sched_timer
  2024-03-29 13:06 [syzbot] [bpf?] [net?] possible deadlock in tick_setup_sched_timer syzbot
  2024-03-29 21:43 ` Edward Adam Davis
@ 2024-03-30 10:23 ` Edward Adam Davis
  2024-03-30 16:24   ` syzbot
  2024-04-02  9:02 ` Jakub Sitnicki
  2 siblings, 1 reply; 6+ messages in thread
From: Edward Adam Davis @ 2024-03-30 10:23 UTC (permalink / raw)
  To: syzbot+e4374f6c021d422de3d1; +Cc: linux-kernel, syzkaller-bugs

please test dl in tick_setup_sched_timer

#syz test https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git fe46a7dd189e

diff --git a/net/core/sock_map.c b/net/core/sock_map.c
index 27d733c0f65e..ae8f81b26e16 100644
--- a/net/core/sock_map.c
+++ b/net/core/sock_map.c
@@ -932,11 +932,12 @@ static long sock_hash_delete_elem(struct bpf_map *map, void *key)
 	struct bpf_shtab_bucket *bucket;
 	struct bpf_shtab_elem *elem;
 	int ret = -ENOENT;
+	unsigned long flags;
 
 	hash = sock_hash_bucket_hash(key, key_size);
 	bucket = sock_hash_select_bucket(htab, hash);
 
-	spin_lock_bh(&bucket->lock);
+	spin_lock_irqsave(&bucket->lock, flags);
 	elem = sock_hash_lookup_elem_raw(&bucket->head, hash, key, key_size);
 	if (elem) {
 		hlist_del_rcu(&elem->node);
@@ -944,7 +945,7 @@ static long sock_hash_delete_elem(struct bpf_map *map, void *key)
 		sock_hash_free_elem(htab, elem);
 		ret = 0;
 	}
-	spin_unlock_bh(&bucket->lock);
+	spin_unlock_irqrestore(&bucket->lock, flags);
 	return ret;
 }
 
@@ -1136,6 +1137,7 @@ static void sock_hash_free(struct bpf_map *map)
 	struct bpf_shtab_elem *elem;
 	struct hlist_node *node;
 	int i;
+	unsigned long flags;
 
 	/* After the sync no updates or deletes will be in-flight so it
 	 * is safe to walk map and remove entries without risking a race
@@ -1151,11 +1153,11 @@ static void sock_hash_free(struct bpf_map *map)
 		 * exists, psock exists and holds a ref to socket. That
 		 * lets us to grab a socket ref too.
 		 */
-		spin_lock_bh(&bucket->lock);
+		spin_lock_irqsave(&bucket->lock, flags);
 		hlist_for_each_entry(elem, &bucket->head, node)
 			sock_hold(elem->sk);
 		hlist_move_list(&bucket->head, &unlink_list);
-		spin_unlock_bh(&bucket->lock);
+		spin_unlock_irqrestore(&bucket->lock, flags);
 
 		/* Process removed entries out of atomic context to
 		 * block for socket lock before deleting the psock's


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [syzbot] [bpf?] [net?] possible deadlock in tick_setup_sched_timer
  2024-03-30 10:23 ` Edward Adam Davis
@ 2024-03-30 16:24   ` syzbot
  0 siblings, 0 replies; 6+ messages in thread
From: syzbot @ 2024-03-30 16:24 UTC (permalink / raw)
  To: eadavis, linux-kernel, syzkaller-bugs

Hello,

syzbot has tested the proposed patch and the reproducer did not trigger any issue:

Reported-and-tested-by: syzbot+e4374f6c021d422de3d1@syzkaller.appspotmail.com

Tested on:

commit:         fe46a7dd Merge tag 'sound-6.9-rc1' of git://git.kernel..
git tree:       https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
console output: https://syzkaller.appspot.com/x/log.txt?x=12176341180000
kernel config:  https://syzkaller.appspot.com/x/.config?x=aef2a55903e5791c
dashboard link: https://syzkaller.appspot.com/bug?extid=e4374f6c021d422de3d1
compiler:       gcc (Debian 12.2.0-14) 12.2.0, GNU ld (GNU Binutils for Debian) 2.40
patch:          https://syzkaller.appspot.com/x/patch.diff?x=10e213b1180000

Note: testing is done by a robot and is best-effort only.

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [syzbot] [bpf?] [net?] possible deadlock in tick_setup_sched_timer
  2024-03-29 13:06 [syzbot] [bpf?] [net?] possible deadlock in tick_setup_sched_timer syzbot
  2024-03-29 21:43 ` Edward Adam Davis
  2024-03-30 10:23 ` Edward Adam Davis
@ 2024-04-02  9:02 ` Jakub Sitnicki
  2 siblings, 0 replies; 6+ messages in thread
From: Jakub Sitnicki @ 2024-04-02  9:02 UTC (permalink / raw)
  To: syzbot
  Cc: andrii, ast, bpf, daniel, davem, edumazet, john.fastabend, kuba,
	linux-kernel, netdev, pabeni, syzkaller-bugs

#syz dup: [syzbot] [bpf?] [net?] possible deadlock in ahci_single_level_irq_intr

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2024-04-02  9:02 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-03-29 13:06 [syzbot] [bpf?] [net?] possible deadlock in tick_setup_sched_timer syzbot
2024-03-29 21:43 ` Edward Adam Davis
2024-03-30  8:58   ` syzbot
2024-03-30 10:23 ` Edward Adam Davis
2024-03-30 16:24   ` syzbot
2024-04-02  9:02 ` Jakub Sitnicki

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.