========================================================
WARNING: possible irq lock inversion dependency detected
5.11.0-rc1-syzkaller #0 Not tainted
--------------------------------------------------------
syz-executor.3/29824 just changed the state of lock:
ffff88807c965498 (&ctx->completion_lock){-...}-{2:2}, at: io_timeout_fn+0x6f/0x3d0 fs/io_uring.c:5619
but this lock took another, HARDIRQ-READ-unsafe lock in the past:
 (&new->fa_lock){.+.+}-{2:2}


and interrupts could create inverse lock ordering between them.


other info that might help us debug this:
 Possible interrupt unsafe locking scenario:

       CPU0                    CPU1
       ----                    ----
  lock(&new->fa_lock);
                               local_irq_disable();
                               lock(&ctx->completion_lock);
                               lock(&new->fa_lock);
  <Interrupt>
    lock(&ctx->completion_lock);

 *** DEADLOCK ***

1 lock held by syz-executor.3/29824:
 #0: ffff88807c9653e8 (&ctx->uring_lock){+.+.}-{3:3}, at: __do_sys_io_uring_enter+0x6c6/0x1e70 fs/io_uring.c:9191

the shortest dependencies between 2nd lock and 1st lock:
 -> (&new->fa_lock){.+.+}-{2:2} {
    HARDIRQ-ON-R at:
                      lock_acquire kernel/locking/lockdep.c:5437 [inline]
                      lock_acquire+0x29d/0x740 kernel/locking/lockdep.c:5402
                      __raw_read_lock include/linux/rwlock_api_smp.h:149 [inline]
                      _raw_read_lock+0x5b/0x70 kernel/locking/spinlock.c:223
                      kill_fasync_rcu fs/fcntl.c:1004 [inline]
                      kill_fasync fs/fcntl.c:1025 [inline]
                      kill_fasync+0x14b/0x460 fs/fcntl.c:1018
                      pipe_release+0x1ba/0x320 fs/pipe.c:714
                      __fput+0x283/0x920 fs/file_table.c:280
                      task_work_run+0xdd/0x190 kernel/task_work.c:140
                      tracehook_notify_resume include/linux/tracehook.h:189 [inline]
                      exit_to_user_mode_loop kernel/entry/common.c:174 [inline]
                      exit_to_user_mode_prepare+0x249/0x250 kernel/entry/common.c:201
                      __syscall_exit_to_user_mode_work kernel/entry/common.c:291 [inline]
                      syscall_exit_to_user_mode+0x19/0x50 kernel/entry/common.c:302
                      entry_SYSCALL_64_after_hwframe+0x44/0xa9
    SOFTIRQ-ON-R at:
                      lock_acquire kernel/locking/lockdep.c:5437 [inline]
                      lock_acquire+0x29d/0x740 kernel/locking/lockdep.c:5402
                      __raw_read_lock include/linux/rwlock_api_smp.h:149 [inline]
                      _raw_read_lock+0x5b/0x70 kernel/locking/spinlock.c:223
                      kill_fasync_rcu fs/fcntl.c:1004 [inline]
                      kill_fasync fs/fcntl.c:1025 [inline]
                      kill_fasync+0x14b/0x460 fs/fcntl.c:1018
                      pipe_release+0x1ba/0x320 fs/pipe.c:714
                      __fput+0x283/0x920 fs/file_table.c:280
                      task_work_run+0xdd/0x190 kernel/task_work.c:140
                      tracehook_notify_resume include/linux/tracehook.h:189 [inline]
                      exit_to_user_mode_loop kernel/entry/common.c:174 [inline]
                      exit_to_user_mode_prepare+0x249/0x250 kernel/entry/common.c:201
                      __syscall_exit_to_user_mode_work kernel/entry/common.c:291 [inline]
                      syscall_exit_to_user_mode+0x19/0x50 kernel/entry/common.c:302
                      entry_SYSCALL_64_after_hwframe+0x44/0xa9
    INITIAL USE at:
                     lock_acquire kernel/locking/lockdep.c:5437 [inline]
                     lock_acquire+0x29d/0x740 kernel/locking/lockdep.c:5402
                     __raw_write_lock_irq include/linux/rwlock_api_smp.h:196 [inline]
                     _raw_write_lock_irq+0x32/0x50 kernel/locking/spinlock.c:311
                     fasync_insert_entry+0x1d8/0x2b0 fs/fcntl.c:929
                     fasync_add_entry fs/fcntl.c:968 [inline]
                     fasync_helper+0x5f/0xb0 fs/fcntl.c:986
                     pipe_fasync+0xda/0x230 fs/pipe.c:732
                     ioctl_fioasync fs/ioctl.c:583 [inline]
                     do_vfs_ioctl+0x40e/0x1090 fs/ioctl.c:686
                     __do_sys_ioctl fs/ioctl.c:751 [inline]
                     __se_sys_ioctl fs/ioctl.c:739 [inline]
                     __x64_sys_ioctl+0x108/0x200 fs/ioctl.c:739
                     do_syscall_64+0x2d/0x70 arch/x86/entry/common.c:46
                     entry_SYSCALL_64_after_hwframe+0x44/0xa9
    INITIAL READ USE at:
                          lock_acquire kernel/locking/lockdep.c:5437 [inline]
                          lock_acquire+0x29d/0x740 kernel/locking/lockdep.c:5402
                          __raw_read_lock include/linux/rwlock_api_smp.h:149 [inline]
                          _raw_read_lock+0x5b/0x70 kernel/locking/spinlock.c:223
                          kill_fasync_rcu fs/fcntl.c:1004 [inline]
                          kill_fasync fs/fcntl.c:1025 [inline]
                          kill_fasync+0x14b/0x460 fs/fcntl.c:1018
                          pipe_release+0x1ba/0x320 fs/pipe.c:714
                          __fput+0x283/0x920 fs/file_table.c:280
                          task_work_run+0xdd/0x190 kernel/task_work.c:140
                          tracehook_notify_resume include/linux/tracehook.h:189 [inline]
                          exit_to_user_mode_loop kernel/entry/common.c:174 [inline]
                          exit_to_user_mode_prepare+0x249/0x250 kernel/entry/common.c:201
                          __syscall_exit_to_user_mode_work kernel/entry/common.c:291 [inline]
                          syscall_exit_to_user_mode+0x19/0x50 kernel/entry/common.c:302
                          entry_SYSCALL_64_after_hwframe+0x44/0xa9
  }
  ... key      at: [<ffffffff8ef8c980>] __key.0+0x0/0x40
  ... acquired at:
   __raw_read_lock include/linux/rwlock_api_smp.h:149 [inline]
   _raw_read_lock+0x5b/0x70 kernel/locking/spinlock.c:223
   kill_fasync_rcu fs/fcntl.c:1004 [inline]
   kill_fasync fs/fcntl.c:1025 [inline]
   kill_fasync+0x14b/0x460 fs/fcntl.c:1018
   __io_commit_cqring fs/io_uring.c:1344 [inline]
   io_commit_cqring+0x34e/0xa90 fs/io_uring.c:1654
   io_submit_flush_completions+0x269/0x3a0 fs/io_uring.c:1851
   __io_req_complete+0x209/0x310 fs/io_uring.c:1870
   io_nop fs/io_uring.c:3893 [inline]
   io_issue_sqe+0x1234/0x4490 fs/io_uring.c:6180
   __io_queue_sqe+0x228/0x10c0 fs/io_uring.c:6484
   io_queue_sqe+0x631/0x10d0 fs/io_uring.c:6550
   io_submit_sqe fs/io_uring.c:6623 [inline]
   io_submit_sqes+0x1495/0x2720 fs/io_uring.c:6871
   __do_sys_io_uring_enter+0x6d1/0x1e70 fs/io_uring.c:9192
   do_syscall_64+0x2d/0x70 arch/x86/entry/common.c:46
   entry_SYSCALL_64_after_hwframe+0x44/0xa9

-> (&ctx->completion_lock){-...}-{2:2} {
   IN-HARDIRQ-W at:
                    lock_acquire kernel/locking/lockdep.c:5437 [inline]
                    lock_acquire+0x29d/0x740 kernel/locking/lockdep.c:5402
                    __raw_spin_lock_irqsave include/linux/spinlock_api_smp.h:110 [inline]
                    _raw_spin_lock_irqsave+0x39/0x50 kernel/locking/spinlock.c:159
                    io_timeout_fn+0x6f/0x3d0 fs/io_uring.c:5619
                    __run_hrtimer kernel/time/hrtimer.c:1519 [inline]
                    __hrtimer_run_queues+0x693/0xea0 kernel/time/hrtimer.c:1583
                    hrtimer_interrupt+0x334/0x940 kernel/time/hrtimer.c:1645
                    local_apic_timer_interrupt arch/x86/kernel/apic/apic.c:1085 [inline]
                    __sysvec_apic_timer_interrupt+0x146/0x540 arch/x86/kernel/apic/apic.c:1102
                    asm_call_irq_on_stack+0xf/0x20
                    __run_sysvec_on_irqstack arch/x86/include/asm/irq_stack.h:37 [inline]
                    run_sysvec_on_irqstack_cond arch/x86/include/asm/irq_stack.h:89 [inline]
                    sysvec_apic_timer_interrupt+0xbd/0x100 arch/x86/kernel/apic/apic.c:1096
                    asm_sysvec_apic_timer_interrupt+0x12/0x20 arch/x86/include/asm/idtentry.h:628
                    __raw_spin_unlock_irq include/linux/spinlock_api_smp.h:169 [inline]
                    _raw_spin_unlock_irq+0x25/0x40 kernel/locking/spinlock.c:199
                    spin_unlock_irq include/linux/spinlock.h:404 [inline]
                    io_timeout fs/io_uring.c:5823 [inline]
                    io_issue_sqe+0x1cf3/0x4490 fs/io_uring.c:6217
                    __io_queue_sqe+0x228/0x10c0 fs/io_uring.c:6484
                    io_queue_sqe+0x631/0x10d0 fs/io_uring.c:6550
                    io_queue_link_head fs/io_uring.c:6561 [inline]
                    io_submit_sqes+0xac1/0x2720 fs/io_uring.c:6886
                    __do_sys_io_uring_enter+0x6d1/0x1e70 fs/io_uring.c:9192
                    do_syscall_64+0x2d/0x70 arch/x86/entry/common.c:46
                    entry_SYSCALL_64_after_hwframe+0x44/0xa9
   INITIAL USE at:
                   lock_acquire kernel/locking/lockdep.c:5437 [inline]
                   lock_acquire+0x29d/0x740 kernel/locking/lockdep.c:5402
                   __raw_spin_lock_irqsave include/linux/spinlock_api_smp.h:110 [inline]
                   _raw_spin_lock_irqsave+0x39/0x50 kernel/locking/spinlock.c:159
                   io_cqring_overflow_flush+0x1a9/0xc20 fs/io_uring.c:1726
                   io_ring_ctx_wait_and_kill+0x9e/0x570 fs/io_uring.c:8663
                   io_uring_create fs/io_uring.c:9612 [inline]
                   io_uring_setup+0x1246/0x3860 fs/io_uring.c:9639
                   do_syscall_64+0x2d/0x70 arch/x86/entry/common.c:46
                   entry_SYSCALL_64_after_hwframe+0x44/0xa9
 }
 ... key      at: [<ffffffff8ef90a60>] __key.10+0x0/0x40
 ... acquired at:
   mark_usage kernel/locking/lockdep.c:4303 [inline]
   __lock_acquire+0x1459/0x5500 kernel/locking/lockdep.c:4786
   lock_acquire kernel/locking/lockdep.c:5437 [inline]
   lock_acquire+0x29d/0x740 kernel/locking/lockdep.c:5402
   __raw_spin_lock_irqsave include/linux/spinlock_api_smp.h:110 [inline]
   _raw_spin_lock_irqsave+0x39/0x50 kernel/locking/spinlock.c:159
   io_timeout_fn+0x6f/0x3d0 fs/io_uring.c:5619
   __run_hrtimer kernel/time/hrtimer.c:1519 [inline]
   __hrtimer_run_queues+0x693/0xea0 kernel/time/hrtimer.c:1583
   hrtimer_interrupt+0x334/0x940 kernel/time/hrtimer.c:1645
   local_apic_timer_interrupt arch/x86/kernel/apic/apic.c:1085 [inline]
   __sysvec_apic_timer_interrupt+0x146/0x540 arch/x86/kernel/apic/apic.c:1102
   asm_call_irq_on_stack+0xf/0x20
   __run_sysvec_on_irqstack arch/x86/include/asm/irq_stack.h:37 [inline]
   run_sysvec_on_irqstack_cond arch/x86/include/asm/irq_stack.h:89 [inline]
   sysvec_apic_timer_interrupt+0xbd/0x100 arch/x86/kernel/apic/apic.c:1096
   asm_sysvec_apic_timer_interrupt+0x12/0x20 arch/x86/include/asm/idtentry.h:628
   __raw_spin_unlock_irq include/linux/spinlock_api_smp.h:169 [inline]
   _raw_spin_unlock_irq+0x25/0x40 kernel/locking/spinlock.c:199
   spin_unlock_irq include/linux/spinlock.h:404 [inline]
   io_timeout fs/io_uring.c:5823 [inline]
   io_issue_sqe+0x1cf3/0x4490 fs/io_uring.c:6217
   __io_queue_sqe+0x228/0x10c0 fs/io_uring.c:6484
   io_queue_sqe+0x631/0x10d0 fs/io_uring.c:6550
   io_queue_link_head fs/io_uring.c:6561 [inline]
   io_submit_sqes+0xac1/0x2720 fs/io_uring.c:6886
   __do_sys_io_uring_enter+0x6d1/0x1e70 fs/io_uring.c:9192
   do_syscall_64+0x2d/0x70 arch/x86/entry/common.c:46
   entry_SYSCALL_64_after_hwframe+0x44/0xa9


stack backtrace:
CPU: 1 PID: 29824 Comm: syz-executor.3 Not tainted 5.11.0-rc1-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:79 [inline]
 dump_stack+0x107/0x163 lib/dump_stack.c:120
 print_irq_inversion_bug kernel/locking/lockdep.c:4413 [inline]
 check_usage_forwards kernel/locking/lockdep.c:3849 [inline]
 mark_lock_irq kernel/locking/lockdep.c:3981 [inline]
 mark_lock.cold+0x6e/0x73 kernel/locking/lockdep.c:4411
 mark_usage kernel/locking/lockdep.c:4303 [inline]
 __lock_acquire+0x1459/0x5500 kernel/locking/lockdep.c:4786
 lock_acquire kernel/locking/lockdep.c:5437 [inline]
 lock_acquire+0x29d/0x740 kernel/locking/lockdep.c:5402
 __raw_spin_lock_irqsave include/linux/spinlock_api_smp.h:110 [inline]
 _raw_spin_lock_irqsave+0x39/0x50 kernel/locking/spinlock.c:159
 io_timeout_fn+0x6f/0x3d0 fs/io_uring.c:5619
 __run_hrtimer kernel/time/hrtimer.c:1519 [inline]
 __hrtimer_run_queues+0x693/0xea0 kernel/time/hrtimer.c:1583
 hrtimer_interrupt+0x334/0x940 kernel/time/hrtimer.c:1645
 local_apic_timer_interrupt arch/x86/kernel/apic/apic.c:1085 [inline]
 __sysvec_apic_timer_interrupt+0x146/0x540 arch/x86/kernel/apic/apic.c:1102
 asm_call_irq_on_stack+0xf/0x20
 </IRQ>
 __run_sysvec_on_irqstack arch/x86/include/asm/irq_stack.h:37 [inline]
 run_sysvec_on_irqstack_cond arch/x86/include/asm/irq_stack.h:89 [inline]
 sysvec_apic_timer_interrupt+0xbd/0x100 arch/x86/kernel/apic/apic.c:1096
 asm_sysvec_apic_timer_interrupt+0x12/0x20 arch/x86/include/asm/idtentry.h:628
RIP: 0010:__raw_spin_unlock_irq include/linux/spinlock_api_smp.h:169 [inline]
RIP: 0010:_raw_spin_unlock_irq+0x25/0x40 kernel/locking/spinlock.c:199
Code: 0f 1f 44 00 00 55 48 8b 74 24 08 48 89 fd 48 83 c7 18 e8 ce ab 6a f8 48 89 ef e8 56 60 6b f8 e8 21 6b 8a f8 fb bf 01 00 00 00 <e8> 46 70 5f f8 65 8b 05 6f 16 14 77 85 c0 74 02 5d c3 e8 ab 6b 12
RSP: 0018:ffffc900031c7868 EFLAGS: 00000206
RAX: 0000000000009799 RBX: 0000000000000000 RCX: ffffffff81580937
RDX: 0000000000000000 RSI: 0000000000000001 RDI: 0000000000000001
RBP: ffff88807c965480 R08: 0000000000000001 R09: ffffffff8ebd9897
R10: fffffbfff1d7b312 R11: 0000000000000000 R12: ffff888013715a80
R13: 0000000000000000 R14: 0000000000989680 R15: ffff8880740cca00
 spin_unlock_irq include/linux/spinlock.h:404 [inline]
 io_timeout fs/io_uring.c:5823 [inline]
 io_issue_sqe+0x1cf3/0x4490 fs/io_uring.c:6217
 __io_queue_sqe+0x228/0x10c0 fs/io_uring.c:6484
 io_queue_sqe+0x631/0x10d0 fs/io_uring.c:6550
 io_queue_link_head fs/io_uring.c:6561 [inline]
 io_submit_sqes+0xac1/0x2720 fs/io_uring.c:6886
 __do_sys_io_uring_enter+0x6d1/0x1e70 fs/io_uring.c:9192
 do_syscall_64+0x2d/0x70 arch/x86/entry/common.c:46
 entry_SYSCALL_64_after_hwframe+0x44/0xa9
RIP: 0033:0x45e299
Code: 0d b4 fb ff c3 66 2e 0f 1f 84 00 00 00 00 00 66 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 0f 83 db b3 fb ff c3 66 2e 0f 1f 84 00 00 00 00
RSP: 002b:00007f891ce83c68 EFLAGS: 00000246 ORIG_RAX: 00000000000001aa
RAX: ffffffffffffffda RBX: 0000000000000006 RCX: 000000000045e299
RDX: 0000000000000000 RSI: 000000000000450c RDI: 0000000000000005
RBP: 000000000119bfd8 R08: 0000000000000000 R09: 0000000000000000
R10: 0000000000000000 R11: 0000000000000246 R12: 000000000119bf8c
R13: 00000000016afb5f R14: 00007f891ce849c0 R15: 000000000119bf8c