Bluetooth: avoid recursive locking in hci_send_to_channel()
commita9ee77af751f435675054f5a7e2d2e69cbfe9e33
authorSebastian Andrzej Siewior <bigeasy@linutronix.de>
Thu, 21 Sep 2017 13:51:23 +0000 (21 15:51 +0200)
committerMarcel Holtmann <marcel@holtmann.org>
Mon, 30 Oct 2017 08:04:07 +0000 (30 09:04 +0100)
tree75d3524a3d20e74e4d34d0e43b3f9b6ff41fe0cb
parent1f01d8be0e6a04bd682a55f6d50c14c1679e7571
Bluetooth: avoid recursive locking in hci_send_to_channel()

Mart reported a deadlock in -RT in the call path:
  hci_send_monitor_ctrl_event() -> hci_send_to_channel()

because both functions acquire the same read lock hci_sk_list.lock. This
is also a mainline issue because the qrwlock implementation is writer
fair (the traditional rwlock implementation is reader biased).

To avoid the deadlock there is now __hci_send_to_channel() which expects
the readlock to be held.

Fixes: 38ceaa00d02d ("Bluetooth: Add support for sending MGMT commands and events to monitor")
Reported-by: Mart van de Wege <mvdwege@gmail.com>
Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
net/bluetooth/hci_sock.c