========================================================
WARNING: possible irq lock inversion dependency detected
6.16.0-syzkaller-11895-gcca7a0aae895 #0 Not tainted
--------------------------------------------------------
syz.0.1550/10009 just changed the state of lock:
ffff88811109a230 (&dev->event_lock#2){..-.}-{3:3}, at: input_event+0x76/0xe0
but this lock took another, SOFTIRQ-READ-unsafe lock in the past:
 (tasklist_lock){.+.+}-{3:3}


and interrupts could create inverse lock ordering between them.


other info that might help us debug this:
Chain exists of:
  &dev->event_lock#2 --> &client->buffer_lock --> tasklist_lock

 Possible interrupt unsafe locking scenario:

       CPU0                    CPU1
       ----                    ----
  lock(tasklist_lock);
                               local_irq_disable();
                               lock(&dev->event_lock#2);
                               lock(&client->buffer_lock);
  <Interrupt>
    lock(&dev->event_lock#2);

 *** DEADLOCK ***

1 lock held by syz.0.1550/10009:
 #0: ffffffff8e139ee0 (rcu_read_lock){....}-{1:3}, at: xpad_irq_in+0xb90/0x2590

the shortest dependencies between 2nd lock and 1st lock:
    -> (tasklist_lock){.+.+}-{3:3} {
       HARDIRQ-ON-R at:
                            lock_acquire+0x120/0x360
                            _raw_read_lock+0x36/0x50
                            __do_wait+0xde/0x740
                            do_wait+0x1f8/0x520
                            kernel_wait+0xab/0x170
                            call_usermodehelper_exec_work+0xbe/0x230
                            process_scheduled_works+0xae1/0x17b0
                            worker_thread+0x8a0/0xda0
                            kthread+0x711/0x8a0
                            ret_from_fork+0x3fc/0x770
                            ret_from_fork_asm+0x1a/0x30
       SOFTIRQ-ON-R at:
                            lock_acquire+0x120/0x360
                            _raw_read_lock+0x36/0x50
                            __do_wait+0xde/0x740
                            do_wait+0x1f8/0x520
                            kernel_wait+0xab/0x170
                            call_usermodehelper_exec_work+0xbe/0x230
                            process_scheduled_works+0xae1/0x17b0
                            worker_thread+0x8a0/0xda0
                            kthread+0x711/0x8a0
                            ret_from_fork+0x3fc/0x770
                            ret_from_fork_asm+0x1a/0x30
       INITIAL USE at:
                           lock_acquire+0x120/0x360
                           _raw_write_lock_irq+0xa2/0xf0
                           copy_process+0x224f/0x3c00
                           kernel_clone+0x21e/0x840
                           user_mode_thread+0xdd/0x140
                           rest_init+0x23/0x300
                           start_kernel+0x3a9/0x410
                           x86_64_start_reservations+0x24/0x30
                           x86_64_start_kernel+0x143/0x1c0
                           common_startup_64+0x13e/0x147
       INITIAL READ USE at:
                                lock_acquire+0x120/0x360
                                _raw_read_lock+0x36/0x50
                                __do_wait+0xde/0x740
                                do_wait+0x1f8/0x520
                                kernel_wait+0xab/0x170
                                call_usermodehelper_exec_work+0xbe/0x230
                                process_scheduled_works+0xae1/0x17b0
                                worker_thread+0x8a0/0xda0
                                kthread+0x711/0x8a0
                                ret_from_fork+0x3fc/0x770
                                ret_from_fork_asm+0x1a/0x30
     }
     ... key      at: [<ffffffff8de0c058>] tasklist_lock+0x18/0x40
     ... acquired at:
   lock_acquire+0x120/0x360
   _raw_read_lock+0x36/0x50
   send_sigio+0x101/0x370
   dnotify_handle_event+0x169/0x440
   fsnotify+0x1814/0x1a80
   fsnotify_move+0x126/0x5b0
   vfs_rename+0x90b/0xf00
   do_renameat2+0x6ce/0xa80
   __x64_sys_renameat2+0xce/0xe0
   do_syscall_64+0xfa/0x3b0
   entry_SYSCALL_64_after_hwframe+0x77/0x7f

   -> (&f_owner->lock){....}-{3:3} {
      INITIAL USE at:
                         lock_acquire+0x120/0x360
                         _raw_write_lock_irq+0xa2/0xf0
                         __f_setown+0x67/0x370
                         generic_setlease+0xd60/0x1240
                         fcntl_setlease+0x3a2/0x4c0
                         do_fcntl+0x6a9/0x1910
                         __se_sys_fcntl+0xc8/0x150
                         do_syscall_64+0xfa/0x3b0
                         entry_SYSCALL_64_after_hwframe+0x77/0x7f
      INITIAL READ USE at:
                              lock_acquire+0x120/0x360
                              _raw_read_lock_irqsave+0xaf/0x100
                              send_sigio+0x38/0x370
                              kill_fasync+0x24d/0x4d0
                              sock_wake_async+0x137/0x160
                              sk_wake_async+0x184/0x280
                              unix_release_sock+0x768/0xd30
                              unix_release+0x92/0xd0
                              sock_close+0xc3/0x240
                              __fput+0x44c/0xa70
                              task_work_run+0x1d4/0x260
                              do_exit+0x6b5/0x2300
                              do_group_exit+0x21c/0x2d0
                              get_signal+0x1286/0x1340
                              arch_do_signal_or_restart+0x9a/0x750
                              exit_to_user_mode_loop+0x75/0x110
                              do_syscall_64+0x2bd/0x3b0
                              entry_SYSCALL_64_after_hwframe+0x77/0x7f
    }
    ... key      at: [<ffffffff99b22f60>] file_f_owner_allocate.__key+0x0/0x20
    ... acquired at:
   lock_acquire+0x120/0x360
   _raw_read_lock_irqsave+0xaf/0x100
   send_sigio+0x38/0x370
   kill_fasync+0x24d/0x4d0
   sock_wake_async+0x137/0x160
   sk_wake_async+0x184/0x280
   unix_release_sock+0x768/0xd30
   unix_release+0x92/0xd0
   sock_close+0xc3/0x240
   __fput+0x44c/0xa70
   task_work_run+0x1d4/0x260
   do_exit+0x6b5/0x2300
   do_group_exit+0x21c/0x2d0
   get_signal+0x1286/0x1340
   arch_do_signal_or_restart+0x9a/0x750
   exit_to_user_mode_loop+0x75/0x110
   do_syscall_64+0x2bd/0x3b0
   entry_SYSCALL_64_after_hwframe+0x77/0x7f

  -> (&new->fa_lock){...-}-{3:3} {
     IN-SOFTIRQ-R at:
                        lock_acquire+0x120/0x360
                        _raw_read_lock_irqsave+0xaf/0x100
                        kill_fasync+0x199/0x4d0
                        sock_wake_async+0x137/0x160
                        sock_def_readable+0x3bb/0x550
                        tcp_data_queue+0x2026/0x6380
                        tcp_rcv_established+0xf9e/0x1eb0
                        tcp_v4_do_rcv+0xa23/0xce0
                        tcp_v4_rcv+0x26a6/0x2f40
                        ip_protocol_deliver_rcu+0x221/0x440
                        ip_local_deliver_finish+0x3bb/0x6f0
                        NF_HOOK+0x30c/0x3a0
                        NF_HOOK+0x30c/0x3a0
                        __netif_receive_skb+0x143/0x380
                        process_backlog+0x60e/0x14f0
                        __napi_poll+0xc7/0x360
                        net_rx_action+0x707/0xe30
                        handle_softirqs+0x286/0x870
                        run_ksoftirqd+0x9b/0x100
                        smpboot_thread_fn+0x542/0xa60
                        kthread+0x711/0x8a0
                        ret_from_fork+0x3fc/0x770
                        ret_from_fork_asm+0x1a/0x30
     INITIAL USE at:
                       lock_acquire+0x120/0x360
                       _raw_write_lock_irq+0xa2/0xf0
                       fasync_remove_entry+0xf1/0x1c0
                       lease_modify+0x1ca/0x3c0
                       locks_remove_file+0x4bf/0xea0
                       __fput+0x3ab/0xa70
                       task_work_run+0x1d4/0x260
                       exit_to_user_mode_loop+0xec/0x110
                       do_syscall_64+0x2bd/0x3b0
                       entry_SYSCALL_64_after_hwframe+0x77/0x7f
     INITIAL READ USE at:
                            lock_acquire+0x120/0x360
                            _raw_read_lock_irqsave+0xaf/0x100
                            kill_fasync+0x199/0x4d0
                            evdev_pass_values+0x627/0xbd0
                            evdev_events+0x1e6/0x340
                            input_pass_values+0x288/0x890
                            input_event_dispose+0x330/0x6b0
                            input_inject_event+0x1dd/0x340
                            evdev_write+0x2fc/0x480
                            vfs_write+0x27e/0xa90
                            ksys_write+0x145/0x250
                            do_syscall_64+0xfa/0x3b0
                            entry_SYSCALL_64_after_hwframe+0x77/0x7f
   }
   ... key      at: [<ffffffff99b22f80>] fasync_insert_entry.__key+0x0/0x20
   ... acquired at:
   lock_acquire+0x120/0x360
   _raw_read_lock_irqsave+0xaf/0x100
   kill_fasync+0x199/0x4d0
   evdev_pass_values+0x627/0xbd0
   evdev_events+0x1e6/0x340
   input_pass_values+0x288/0x890
   input_event_dispose+0x330/0x6b0
   input_inject_event+0x1dd/0x340
   evdev_write+0x2fc/0x480
   vfs_write+0x27e/0xa90
   ksys_write+0x145/0x250
   do_syscall_64+0xfa/0x3b0
   entry_SYSCALL_64_after_hwframe+0x77/0x7f

 -> (&client->buffer_lock){....}-{3:3} {
    INITIAL USE at:
                     lock_acquire+0x120/0x360
                     _raw_spin_lock+0x2e/0x40
                     evdev_pass_values+0xb9/0xbd0
                     evdev_events+0x1e6/0x340
                     input_pass_values+0x288/0x890
                     input_event_dispose+0x330/0x6b0
                     input_inject_event+0x1dd/0x340
                     evdev_write+0x2fc/0x480
                     vfs_write+0x27e/0xa90
                     ksys_write+0x145/0x250
                     do_syscall_64+0xfa/0x3b0
                     entry_SYSCALL_64_after_hwframe+0x77/0x7f
  }
  ... key      at: [<ffffffff99e22300>] evdev_open.__key.25+0x0/0x20
  ... acquired at:
   lock_acquire+0x120/0x360
   _raw_spin_lock+0x2e/0x40
   evdev_pass_values+0xb9/0xbd0
   evdev_events+0x1e6/0x340
   input_pass_values+0x288/0x890
   input_event_dispose+0x330/0x6b0
   input_inject_event+0x1dd/0x340
   evdev_write+0x2fc/0x480
   vfs_write+0x27e/0xa90
   ksys_write+0x145/0x250
   do_syscall_64+0xfa/0x3b0
   entry_SYSCALL_64_after_hwframe+0x77/0x7f

-> (&dev->event_lock#2){..-.}-{3:3} {
   IN-SOFTIRQ-W at:
                    lock_acquire+0x120/0x360
                    _raw_spin_lock_irqsave+0xa7/0xf0
                    input_event+0x76/0xe0
                    xpad360_process_packet+0x1fe/0xdd0
                    xpad_irq_in+0x1583/0x2590
                    __usb_hcd_giveback_urb+0x41a/0x690
                    dummy_timer+0x862/0x4550
                    __hrtimer_run_queues+0x52c/0xc60
                    hrtimer_run_softirq+0x187/0x2b0
                    handle_softirqs+0x286/0x870
                    __irq_exit_rcu+0xca/0x1f0
                    irq_exit_rcu+0x9/0x30
                    sysvec_apic_timer_interrupt+0xa6/0xc0
                    asm_sysvec_apic_timer_interrupt+0x1a/0x20
                    __sanitizer_cov_trace_const_cmp8+0x37/0x90
                    truncate_cleanup_folio+0x33f/0x430
                    truncate_inode_folio+0x55/0x70
                    shmem_undo_range+0x3a9/0x14b0
                    shmem_evict_inode+0x272/0xa70
                    evict+0x504/0x9c0
                    __dentry_kill+0x209/0x660
                    dput+0x19f/0x2b0
                    __fput+0x68e/0xa70
                    task_work_run+0x1d4/0x260
                    do_exit+0x6b5/0x2300
                    do_group_exit+0x21c/0x2d0
                    get_signal+0x1286/0x1340
                    arch_do_signal_or_restart+0x9a/0x750
                    exit_to_user_mode_loop+0x75/0x110
                    do_syscall_64+0x2bd/0x3b0
                    entry_SYSCALL_64_after_hwframe+0x77/0x7f
   INITIAL USE at:
                   lock_acquire+0x120/0x360
                   _raw_spin_lock_irqsave+0xa7/0xf0
                   input_inject_event+0xa5/0x340
                   kbd_led_trigger_activate+0xbc/0x100
                   led_trigger_set+0x52d/0x950
                   led_trigger_set_default+0x260/0x2a0
                   led_classdev_register_ext+0x73d/0x930
                   input_leds_connect+0x517/0x790
                   input_register_device+0xd0e/0x1140
                   atkbd_connect+0x72e/0xa00
                   serio_driver_probe+0x82/0xd0
                   really_probe+0x26d/0x9e0
                   __driver_probe_device+0x18c/0x2f0
                   driver_probe_device+0x4f/0x430
                   __driver_attach+0x452/0x700
                   bus_for_each_dev+0x233/0x2b0
                   serio_handle_event+0x1f9/0x8d0
                   process_scheduled_works+0xae1/0x17b0
                   worker_thread+0x8a0/0xda0
                   kthread+0x711/0x8a0
                   ret_from_fork+0x3fc/0x770
                   ret_from_fork_asm+0x1a/0x30
 }
 ... key      at: [<ffffffff99e22060>] input_allocate_device.__key.5+0x0/0x20
 ... acquired at:
   mark_lock+0x11b/0x190
   __lock_acquire+0x680/0xd20
   lock_acquire+0x120/0x360
   _raw_spin_lock_irqsave+0xa7/0xf0
   input_event+0x76/0xe0
   xpad360_process_packet+0x1fe/0xdd0
   xpad_irq_in+0x1583/0x2590
   __usb_hcd_giveback_urb+0x41a/0x690
   dummy_timer+0x862/0x4550
   __hrtimer_run_queues+0x52c/0xc60
   hrtimer_run_softirq+0x187/0x2b0
   handle_softirqs+0x286/0x870
   __irq_exit_rcu+0xca/0x1f0
   irq_exit_rcu+0x9/0x30
   sysvec_apic_timer_interrupt+0xa6/0xc0
   asm_sysvec_apic_timer_interrupt+0x1a/0x20
   __sanitizer_cov_trace_const_cmp8+0x37/0x90
   truncate_cleanup_folio+0x33f/0x430
   truncate_inode_folio+0x55/0x70
   shmem_undo_range+0x3a9/0x14b0
   shmem_evict_inode+0x272/0xa70
   evict+0x504/0x9c0
   __dentry_kill+0x209/0x660
   dput+0x19f/0x2b0
   __fput+0x68e/0xa70
   task_work_run+0x1d4/0x260
   do_exit+0x6b5/0x2300
   do_group_exit+0x21c/0x2d0
   get_signal+0x1286/0x1340
   arch_do_signal_or_restart+0x9a/0x750
   exit_to_user_mode_loop+0x75/0x110
   do_syscall_64+0x2bd/0x3b0
   entry_SYSCALL_64_after_hwframe+0x77/0x7f


stack backtrace:
CPU: 1 UID: 0 PID: 10009 Comm: syz.0.1550 Not tainted 6.16.0-syzkaller-11895-gcca7a0aae895 #0 PREEMPT(full) 
Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.16.2-debian-1.16.2-1 04/01/2014
Call Trace:
 <IRQ>
 dump_stack_lvl+0x189/0x250
 print_irq_inversion_bug+0x1d2/0x1e0
 mark_lock_irq+0x35f/0x390
 mark_lock+0x11b/0x190
 __lock_acquire+0x680/0xd20
 lock_acquire+0x120/0x360
 _raw_spin_lock_irqsave+0xa7/0xf0
 input_event+0x76/0xe0
 xpad360_process_packet+0x1fe/0xdd0
 xpad_irq_in+0x1583/0x2590
 __usb_hcd_giveback_urb+0x41a/0x690
 dummy_timer+0x862/0x4550
 __hrtimer_run_queues+0x52c/0xc60
 hrtimer_run_softirq+0x187/0x2b0
 handle_softirqs+0x286/0x870
 __irq_exit_rcu+0xca/0x1f0
 irq_exit_rcu+0x9/0x30
 sysvec_apic_timer_interrupt+0xa6/0xc0
 </IRQ>
 <TASK>
 asm_sysvec_apic_timer_interrupt+0x1a/0x20
RIP: 0010:__sanitizer_cov_trace_const_cmp8+0x37/0x90
Code: 08 c0 9f 92 65 8b 15 88 0f e0 10 81 e2 00 01 ff 00 74 11 81 fa 00 01 00 00 75 57 83 b9 3c 16 00 00 00 74 4e 8b 91 18 16 00 00 <83> fa 03 75 43 48 8b 91 20 16 00 00 44 8b 89 1c 16 00 00 49 c1 e1
RSP: 0018:ffffc90003def250 EFLAGS: 00000246
RAX: ffffffff81fb424f RBX: ffffea0004410140 RCX: ffff888110de3980
RDX: 0000000000000000 RSI: 0000000000000000 RDI: 0000000000000000
RBP: dffffc0000000000 R08: ffffea0004410147 R09: 1ffffd4000882028
R10: dffffc0000000000 R11: fffff94000882029 R12: ffffea0004410148
R13: dffffc0000000000 R14: 057ff6800002002d R15: 0000000000000000
 truncate_cleanup_folio+0x33f/0x430
 truncate_inode_folio+0x55/0x70
 shmem_undo_range+0x3a9/0x14b0
 shmem_evict_inode+0x272/0xa70
 evict+0x504/0x9c0
 __dentry_kill+0x209/0x660
 dput+0x19f/0x2b0
 __fput+0x68e/0xa70
 task_work_run+0x1d4/0x260
 do_exit+0x6b5/0x2300
 do_group_exit+0x21c/0x2d0
 get_signal+0x1286/0x1340
 arch_do_signal_or_restart+0x9a/0x750
 exit_to_user_mode_loop+0x75/0x110
 do_syscall_64+0x2bd/0x3b0
 entry_SYSCALL_64_after_hwframe+0x77/0x7f
RIP: 0033:0x7f6460d8ebe9
Code: Unable to access opcode bytes at 0x7f6460d8ebbf.
RSP: 002b:00007f6461cb1038 EFLAGS: 00000246 ORIG_RAX: 0000000000000000
RAX: 0000000000018ff8 RBX: 00007f6460fb5fa0 RCX: 00007f6460d8ebe9
RDX: 0000000000018ff8 RSI: 0000200000019680 RDI: 0000000000000003
RBP: 00007f6460e11e19 R08: 0000000000000000 R09: 0000000000000000
R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000
R13: 00007f6460fb6038 R14: 00007f6460fb5fa0 R15: 00007ffd8028f4a8
 </TASK>
xpad 3-1:179.65: xpad_irq_in - usb_submit_urb failed with result -19
xpad 3-1:179.65: xpad_irq_out - usb_submit_urb failed with result -19
