========================================================
WARNING: possible irq lock inversion dependency detected
5.14.0-rc4-syzkaller #0 Not tainted
--------------------------------------------------------
syz-executor.2/16229 just changed the state of lock:
ffff888014aac148 (&timer->lock){..-.}-{2:2}, at: snd_timer_interrupt.part.0+0x34/0xcf0 sound/core/timer.c:857
but this lock took another, SOFTIRQ-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(&timer->lock);
                               lock(&new->fa_lock);
  <Interrupt>
    lock(&timer->lock);

 *** DEADLOCK ***

4 locks held by syz-executor.2/16229:
 #0: ffff8880747c22e8 (&mm->mmap_lock#2){++++}-{3:3}, at: mmap_read_trylock include/linux/mmap_lock.h:136 [inline]
 #0: ffff8880747c22e8 (&mm->mmap_lock#2){++++}-{3:3}, at: do_user_addr_fault+0x285/0x11c0 arch/x86/mm/fault.c:1331
 #1: ffffffff8b979000 (rcu_read_lock){....}-{1:2}, at: filemap_map_pages+0x179/0x1880 mm/filemap.c:3185
 #2: ffff8880425b4438 (ptlock_ptr(page)#2){+.+.}-{2:2}, at: spin_lock include/linux/spinlock.h:354 [inline]
 #2: ffff8880425b4438 (ptlock_ptr(page)#2){+.+.}-{2:2}, at: filemap_map_pages+0xb6d/0x1880 mm/filemap.c:3199
 #3: ffffc90000780d70 ((&priv->tlist)){+.-.}-{0:0}, at: lockdep_copy_map include/linux/lockdep.h:35 [inline]
 #3: ffffc90000780d70 ((&priv->tlist)){+.-.}-{0:0}, at: call_timer_fn+0xd5/0x6b0 kernel/time/timer.c:1409

the shortest dependencies between 2nd lock and 1st lock:
 -> (&new->fa_lock){.+.+}-{2:2} {
    HARDIRQ-ON-R at:
                      lock_acquire kernel/locking/lockdep.c:5625 [inline]
                      lock_acquire+0x1ab/0x510 kernel/locking/lockdep.c:5590
                      __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:1012 [inline]
                      kill_fasync fs/fcntl.c:1033 [inline]
                      kill_fasync+0x132/0x460 fs/fcntl.c:1026
                      wakeup_pipe_writers fs/splice.c:373 [inline]
                      splice_from_pipe_end fs/splice.c:536 [inline]
                      iter_file_splice_write+0x9b0/0xc10 fs/splice.c:718
                      do_splice_from fs/splice.c:767 [inline]
                      do_splice+0xb7e/0x1960 fs/splice.c:1079
                      __do_splice+0x134/0x250 fs/splice.c:1144
                      __do_sys_splice fs/splice.c:1350 [inline]
                      __se_sys_splice fs/splice.c:1332 [inline]
                      __x64_sys_splice+0x198/0x250 fs/splice.c:1332
                      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
    SOFTIRQ-ON-R at:
                      lock_acquire kernel/locking/lockdep.c:5625 [inline]
                      lock_acquire+0x1ab/0x510 kernel/locking/lockdep.c:5590
                      __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:1012 [inline]
                      kill_fasync fs/fcntl.c:1033 [inline]
                      kill_fasync+0x132/0x460 fs/fcntl.c:1026
                      wakeup_pipe_writers fs/splice.c:373 [inline]
                      splice_from_pipe_end fs/splice.c:536 [inline]
                      iter_file_splice_write+0x9b0/0xc10 fs/splice.c:718
                      do_splice_from fs/splice.c:767 [inline]
                      do_splice+0xb7e/0x1960 fs/splice.c:1079
                      __do_splice+0x134/0x250 fs/splice.c:1144
                      __do_sys_splice fs/splice.c:1350 [inline]
                      __se_sys_splice fs/splice.c:1332 [inline]
                      __x64_sys_splice+0x198/0x250 fs/splice.c:1332
                      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
    INITIAL USE at:
                     lock_acquire kernel/locking/lockdep.c:5625 [inline]
                     lock_acquire+0x1ab/0x510 kernel/locking/lockdep.c:5590
                     __raw_write_lock_irq include/linux/rwlock_api_smp.h:196 [inline]
                     _raw_write_lock_irq+0x32/0x50 kernel/locking/spinlock.c:311
                     fasync_remove_entry+0xb6/0x1f0 fs/fcntl.c:890
                     fasync_helper+0x9e/0xb0 fs/fcntl.c:993
                     pipe_fasync+0xda/0x230 fs/pipe.c:732
                     __fput+0x712/0x920 fs/file_table.c:277
                     task_work_run+0xdd/0x1a0 kernel/task_work.c:164
                     tracehook_notify_resume include/linux/tracehook.h:189 [inline]
                     exit_to_user_mode_loop kernel/entry/common.c:175 [inline]
                     exit_to_user_mode_prepare+0x27e/0x290 kernel/entry/common.c:209
                     __syscall_exit_to_user_mode_work kernel/entry/common.c:291 [inline]
                     syscall_exit_to_user_mode+0x19/0x60 kernel/entry/common.c:302
                     do_syscall_64+0x42/0xb0 arch/x86/entry/common.c:86
                     entry_SYSCALL_64_after_hwframe+0x44/0xae
    INITIAL READ USE at:
                          lock_acquire kernel/locking/lockdep.c:5625 [inline]
                          lock_acquire+0x1ab/0x510 kernel/locking/lockdep.c:5590
                          __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:1012 [inline]
                          kill_fasync fs/fcntl.c:1033 [inline]
                          kill_fasync+0x132/0x460 fs/fcntl.c:1026
                          wakeup_pipe_writers fs/splice.c:373 [inline]
                          splice_from_pipe_end fs/splice.c:536 [inline]
                          iter_file_splice_write+0x9b0/0xc10 fs/splice.c:718
                          do_splice_from fs/splice.c:767 [inline]
                          do_splice+0xb7e/0x1960 fs/splice.c:1079
                          __do_splice+0x134/0x250 fs/splice.c:1144
                          __do_sys_splice fs/splice.c:1350 [inline]
                          __se_sys_splice fs/splice.c:1332 [inline]
                          __x64_sys_splice+0x198/0x250 fs/splice.c:1332
                          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
  }
  ... key      at: [<ffffffff90294d60>] __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:1012 [inline]
   kill_fasync fs/fcntl.c:1033 [inline]
   kill_fasync+0x132/0x460 fs/fcntl.c:1026
   snd_timer_user_ccallback+0x298/0x330 sound/core/timer.c:1387
   snd_timer_notify1+0x11c/0x3b0 sound/core/timer.c:516
   snd_timer_start1+0x4d4/0x800 sound/core/timer.c:578
   snd_timer_start sound/core/timer.c:697 [inline]
   snd_timer_start sound/core/timer.c:690 [inline]
   snd_timer_user_start.isra.0+0x1e3/0x260 sound/core/timer.c:1985
   __snd_timer_user_ioctl.isra.0+0xda8/0x24c0 sound/core/timer.c:2108
   snd_timer_user_ioctl+0x77/0xb0 sound/core/timer.c:2129
   vfs_ioctl fs/ioctl.c:51 [inline]
   __do_sys_ioctl fs/ioctl.c:1069 [inline]
   __se_sys_ioctl fs/ioctl.c:1055 [inline]
   __x64_sys_ioctl+0x193/0x200 fs/ioctl.c:1055
   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

-> (&timer->lock){..-.}-{2:2} {
   IN-SOFTIRQ-W at:
                    lock_acquire kernel/locking/lockdep.c:5625 [inline]
                    lock_acquire+0x1ab/0x510 kernel/locking/lockdep.c:5590
                    __raw_spin_lock_irqsave include/linux/spinlock_api_smp.h:110 [inline]
                    _raw_spin_lock_irqsave+0x39/0x50 kernel/locking/spinlock.c:159
                    snd_timer_interrupt.part.0+0x34/0xcf0 sound/core/timer.c:857
                    snd_timer_interrupt sound/core/timer.c:1155 [inline]
                    snd_timer_s_function+0x14b/0x200 sound/core/timer.c:1155
                    call_timer_fn+0x1a5/0x6b0 kernel/time/timer.c:1419
                    expire_timers kernel/time/timer.c:1464 [inline]
                    __run_timers.part.0+0x675/0xa50 kernel/time/timer.c:1732
                    __run_timers kernel/time/timer.c:1713 [inline]
                    run_timer_softirq+0xb3/0x1d0 kernel/time/timer.c:1745
                    __do_softirq+0x29b/0x9c2 kernel/softirq.c:558
                    invoke_softirq kernel/softirq.c:432 [inline]
                    __irq_exit_rcu+0x16e/0x1c0 kernel/softirq.c:636
                    irq_exit_rcu+0x5/0x20 kernel/softirq.c:648
                    sysvec_apic_timer_interrupt+0x93/0xc0 arch/x86/kernel/apic/apic.c:1100
                    asm_sysvec_apic_timer_interrupt+0x12/0x20 arch/x86/include/asm/idtentry.h:638
                    lock_is_held_type+0xfd/0x140 kernel/locking/lockdep.c:5673
                    lock_is_held include/linux/lockdep.h:283 [inline]
                    rcu_read_lock_sched_held+0x3a/0x70 kernel/rcu/update.c:125
                    trace_lock_acquire include/trace/events/lock.h:13 [inline]
                    lock_acquire+0x442/0x510 kernel/locking/lockdep.c:5596
                    rcu_lock_acquire include/linux/rcupdate.h:267 [inline]
                    rcu_read_lock include/linux/rcupdate.h:687 [inline]
                    lock_page_memcg+0x66/0x7d0 mm/memcontrol.c:2011
                    page_add_file_rmap+0x36/0xc30 mm/rmap.c:1215
                    do_set_pte+0x362/0x550 mm/memory.c:3980
                    filemap_map_pages+0xd9f/0x1880 mm/filemap.c:3219
                    do_fault_around mm/memory.c:4151 [inline]
                    do_read_fault mm/memory.c:4166 [inline]
                    do_fault mm/memory.c:4300 [inline]
                    handle_pte_fault mm/memory.c:4558 [inline]
                    __handle_mm_fault+0x2e10/0x5320 mm/memory.c:4693
                    handle_mm_fault+0x1c8/0x790 mm/memory.c:4791
                    do_user_addr_fault+0x48b/0x11c0 arch/x86/mm/fault.c:1390
                    handle_page_fault arch/x86/mm/fault.c:1475 [inline]
                    exc_page_fault+0x9e/0x180 arch/x86/mm/fault.c:1531
                    asm_exc_page_fault+0x1e/0x30 arch/x86/include/asm/idtentry.h:568
   INITIAL USE at:
                   lock_acquire kernel/locking/lockdep.c:5625 [inline]
                   lock_acquire+0x1ab/0x510 kernel/locking/lockdep.c:5590
                   __raw_spin_lock_irqsave include/linux/spinlock_api_smp.h:110 [inline]
                   _raw_spin_lock_irqsave+0x39/0x50 kernel/locking/spinlock.c:159
                   snd_timer_resolution+0x55/0x100 sound/core/timer.c:489
                   snd_timer_user_params.isra.0+0x18e/0x8c0 sound/core/timer.c:1852
                   __snd_timer_user_ioctl.isra.0+0x1020/0x24c0 sound/core/timer.c:2101
                   snd_timer_user_ioctl+0x77/0xb0 sound/core/timer.c:2129
                   vfs_ioctl fs/ioctl.c:51 [inline]
                   __do_sys_ioctl fs/ioctl.c:1069 [inline]
                   __se_sys_ioctl fs/ioctl.c:1055 [inline]
                   __x64_sys_ioctl+0x193/0x200 fs/ioctl.c:1055
                   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
 }
 ... key      at: [<ffffffff905a1620>] __key.12+0x0/0x40
 ... acquired at:
   mark_usage kernel/locking/lockdep.c:4488 [inline]
   __lock_acquire+0x11d5/0x54a0 kernel/locking/lockdep.c:4969
   lock_acquire kernel/locking/lockdep.c:5625 [inline]
   lock_acquire+0x1ab/0x510 kernel/locking/lockdep.c:5590
   __raw_spin_lock_irqsave include/linux/spinlock_api_smp.h:110 [inline]
   _raw_spin_lock_irqsave+0x39/0x50 kernel/locking/spinlock.c:159
   snd_timer_interrupt.part.0+0x34/0xcf0 sound/core/timer.c:857
   snd_timer_interrupt sound/core/timer.c:1155 [inline]
   snd_timer_s_function+0x14b/0x200 sound/core/timer.c:1155
   call_timer_fn+0x1a5/0x6b0 kernel/time/timer.c:1419
   expire_timers kernel/time/timer.c:1464 [inline]
   __run_timers.part.0+0x675/0xa50 kernel/time/timer.c:1732
   __run_timers kernel/time/timer.c:1713 [inline]
   run_timer_softirq+0xb3/0x1d0 kernel/time/timer.c:1745
   __do_softirq+0x29b/0x9c2 kernel/softirq.c:558
   invoke_softirq kernel/softirq.c:432 [inline]
   __irq_exit_rcu+0x16e/0x1c0 kernel/softirq.c:636
   irq_exit_rcu+0x5/0x20 kernel/softirq.c:648
   sysvec_apic_timer_interrupt+0x93/0xc0 arch/x86/kernel/apic/apic.c:1100
   asm_sysvec_apic_timer_interrupt+0x12/0x20 arch/x86/include/asm/idtentry.h:638
   lock_is_held_type+0xfd/0x140 kernel/locking/lockdep.c:5673
   lock_is_held include/linux/lockdep.h:283 [inline]
   rcu_read_lock_sched_held+0x3a/0x70 kernel/rcu/update.c:125
   trace_lock_acquire include/trace/events/lock.h:13 [inline]
   lock_acquire+0x442/0x510 kernel/locking/lockdep.c:5596
   rcu_lock_acquire include/linux/rcupdate.h:267 [inline]
   rcu_read_lock include/linux/rcupdate.h:687 [inline]
   lock_page_memcg+0x66/0x7d0 mm/memcontrol.c:2011
   page_add_file_rmap+0x36/0xc30 mm/rmap.c:1215
   do_set_pte+0x362/0x550 mm/memory.c:3980
   filemap_map_pages+0xd9f/0x1880 mm/filemap.c:3219
   do_fault_around mm/memory.c:4151 [inline]
   do_read_fault mm/memory.c:4166 [inline]
   do_fault mm/memory.c:4300 [inline]
   handle_pte_fault mm/memory.c:4558 [inline]
   __handle_mm_fault+0x2e10/0x5320 mm/memory.c:4693
   handle_mm_fault+0x1c8/0x790 mm/memory.c:4791
   do_user_addr_fault+0x48b/0x11c0 arch/x86/mm/fault.c:1390
   handle_page_fault arch/x86/mm/fault.c:1475 [inline]
   exc_page_fault+0x9e/0x180 arch/x86/mm/fault.c:1531
   asm_exc_page_fault+0x1e/0x30 arch/x86/include/asm/idtentry.h:568


stack backtrace:
CPU: 2 PID: 16229 Comm: syz-executor.2 Not tainted 5.14.0-rc4-syzkaller #0
Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.14.0-2 04/01/2014
Call Trace:
 <IRQ>
 __dump_stack lib/dump_stack.c:88 [inline]
 dump_stack_lvl+0xcd/0x134 lib/dump_stack.c:105
 print_irq_inversion_bug kernel/locking/lockdep.c:203 [inline]
 check_usage_forwards kernel/locking/lockdep.c:4031 [inline]
 mark_lock_irq kernel/locking/lockdep.c:4163 [inline]
 mark_lock.cold+0x86/0x8e kernel/locking/lockdep.c:4593
 mark_usage kernel/locking/lockdep.c:4488 [inline]
 __lock_acquire+0x11d5/0x54a0 kernel/locking/lockdep.c:4969
 lock_acquire kernel/locking/lockdep.c:5625 [inline]
 lock_acquire+0x1ab/0x510 kernel/locking/lockdep.c:5590
 __raw_spin_lock_irqsave include/linux/spinlock_api_smp.h:110 [inline]
 _raw_spin_lock_irqsave+0x39/0x50 kernel/locking/spinlock.c:159
 snd_timer_interrupt.part.0+0x34/0xcf0 sound/core/timer.c:857
 snd_timer_interrupt sound/core/timer.c:1155 [inline]
 snd_timer_s_function+0x14b/0x200 sound/core/timer.c:1155
 call_timer_fn+0x1a5/0x6b0 kernel/time/timer.c:1419
 expire_timers kernel/time/timer.c:1464 [inline]
 __run_timers.part.0+0x675/0xa50 kernel/time/timer.c:1732
 __run_timers kernel/time/timer.c:1713 [inline]
 run_timer_softirq+0xb3/0x1d0 kernel/time/timer.c:1745
 __do_softirq+0x29b/0x9c2 kernel/softirq.c:558
 invoke_softirq kernel/softirq.c:432 [inline]
 __irq_exit_rcu+0x16e/0x1c0 kernel/softirq.c:636
 irq_exit_rcu+0x5/0x20 kernel/softirq.c:648
 sysvec_apic_timer_interrupt+0x93/0xc0 arch/x86/kernel/apic/apic.c:1100
 </IRQ>
 asm_sysvec_apic_timer_interrupt+0x12/0x20 arch/x86/include/asm/idtentry.h:638
RIP: 0010:lock_is_held_type+0xfd/0x140 kernel/locking/lockdep.c:5673
Code: 00 00 b8 ff ff ff ff 65 0f c1 05 7e 9b d7 76 83 f8 01 75 29 9c 58 f6 c4 02 75 3d 48 f7 04 24 00 02 00 00 74 01 fb 48 83 c4 08 <44> 89 e8 5b 5d 41 5c 41 5d 41 5e 41 5f c3 45 31 ed eb b9 0f 0b 48
RSP: 0000:ffffc900027df988 EFLAGS: 00000286
RAX: 0000000000000046 RBX: 0000000000000003 RCX: 0000000000000001
RDX: 0000000000000000 RSI: 0000000000000002 RDI: 0000000000000000
RBP: ffffffff8b978f40 R08: 0000000000000000 R09: ffffffff8d6c4197
R10: fffffbfff1ad8832 R11: 0000000000000000 R12: ffff8880480f2080
R13: 0000000000000000 R14: 00000000ffffffff R15: ffff8880480f2ac0
 lock_is_held include/linux/lockdep.h:283 [inline]
 rcu_read_lock_sched_held+0x3a/0x70 kernel/rcu/update.c:125
 trace_lock_acquire include/trace/events/lock.h:13 [inline]
 lock_acquire+0x442/0x510 kernel/locking/lockdep.c:5596
 rcu_lock_acquire include/linux/rcupdate.h:267 [inline]
 rcu_read_lock include/linux/rcupdate.h:687 [inline]
 lock_page_memcg+0x66/0x7d0 mm/memcontrol.c:2011
 page_add_file_rmap+0x36/0xc30 mm/rmap.c:1215
 do_set_pte+0x362/0x550 mm/memory.c:3980
 filemap_map_pages+0xd9f/0x1880 mm/filemap.c:3219
 do_fault_around mm/memory.c:4151 [inline]
 do_read_fault mm/memory.c:4166 [inline]
 do_fault mm/memory.c:4300 [inline]
 handle_pte_fault mm/memory.c:4558 [inline]
 __handle_mm_fault+0x2e10/0x5320 mm/memory.c:4693
 handle_mm_fault+0x1c8/0x790 mm/memory.c:4791
 do_user_addr_fault+0x48b/0x11c0 arch/x86/mm/fault.c:1390
 handle_page_fault arch/x86/mm/fault.c:1475 [inline]
 exc_page_fault+0x9e/0x180 arch/x86/mm/fault.c:1531
 asm_exc_page_fault+0x1e/0x30 arch/x86/include/asm/idtentry.h:568
RIP: 0033:0x47b94b
Code: b9 cd cc cc cc cc cc cc cc 66 0f 1f 44 00 00 48 89 f8 48 89 f9 49 83 e8 01 49 f7 e1 48 c1 ea 03 48 8d 04 92 48 01 c0 48 29 c1 <0f> b6 04 0e 41 88 00 48 89 f8 48 89 d7 48 83 f8 09 77 d2 4c 89 c0
RSP: 002b:00007ffcc6c08218 EFLAGS: 00010202
RAX: 0000000000000000 RBX: 0000000000000000 RCX: 0000000000000002
RDX: 0000000000000000 RSI: 00000000004e4b40 RDI: 0000000000000002
RBP: 00007ffcc6c08770 R08: 00007ffcc6c08737 R09: cccccccccccccccd
R10: 0000000000000000 R11: 0000000000000000 R12: 00007ffcc6c08790
R13: 00000000004bfbd0 R14: 00007ffcc6c08910 R15: 0000000000000075