• Luiz Augusto von Dentz's avatar
    Bluetooth: ISO: Fix possible circular locking dependency · 6a5ad251
    Luiz Augusto von Dentz authored
    This attempts to fix the following trace:
    
    kworker/u3:1/184 is trying to acquire lock:
    ffff888001888130 (sk_lock-AF_BLUETOOTH-BTPROTO_ISO){+.+.}-{0:0}, at:
    iso_connect_cfm+0x2de/0x690
    
    but task is already holding lock:
    ffff8880028d1c20 (&conn->lock){+.+.}-{2:2}, at:
    iso_connect_cfm+0x265/0x690
    
    which lock already depends on the new lock.
    
    the existing dependency chain (in reverse order) is:
    
    -> #1 (&conn->lock){+.+.}-{2:2}:
           lock_acquire+0x176/0x3d0
           _raw_spin_lock+0x2a/0x40
           __iso_sock_close+0x1dd/0x4f0
           iso_sock_release+0xa0/0x1b0
           sock_close+0x5e/0x120
           __fput+0x102/0x410
           task_work_run+0xf1/0x160
           exit_to_user_mode_prepare+0x170/0x180
           syscall_exit_to_user_mode+0x19/0x50
           do_syscall_64+0x4e/0x90
           entry_SYSCALL_64_after_hwframe+0x62/0xcc
    
    -> #0 (sk_lock-AF_BLUETOOTH-BTPROTO_ISO){+.+.}-{0:0}:
           check_prev_add+0xfc/0x1190
           __lock_acquire+0x1e27/0x2750
           lock_acquire+0x176/0x3d0
           lock_sock_nested+0x32/0x80
           iso_connect_cfm+0x2de/0x690
           hci_cc_le_setup_iso_path+0x195/0x340
           hci_cmd_complete_evt+0x1ae/0x500
           hci_event_packet+0x38e/0x7c0
           hci_rx_work+0x34c/0x980
           process_one_work+0x5a5/0x9a0
           worker_thread+0x89/0x6f0
           kthread+0x14e/0x180
           ret_from_fork+0x22/0x30
    
    other info that might help us debug this:
    
     Possible unsafe locking scenario:
    
           CPU0                    CPU1
           ----                    ----
      lock(&conn->lock);
                                   lock(sk_lock-AF_BLUETOOTH-BTPROTO_ISO);
                                   lock(&conn->lock);
      lock(sk_lock-AF_BLUETOOTH-BTPROTO_ISO);
    
     *** DEADLOCK ***
    
    Fixes: ccf74f23 ("Bluetooth: Add BTPROTO_ISO socket type")
    Fixes: f764a6c2 ("Bluetooth: ISO: Add broadcast support")
    Signed-off-by: default avatarLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
    6a5ad251
iso.c 36.7 KB