mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-10-05 00:20:32 +00:00
Bluetooth: hci_core: fix init for HCI_USER_CHANNEL
[ Upstream commiteb8c101e28
] During the setup() stage, HCI device drivers expect the chip to acknowledge its setup() completion via vendor specific frames. If userspace opens() such HCI device in HCI_USER_CHANNEL [1] mode, the vendor specific frames are never tranmitted to the driver, as they are filtered in hci_rx_work(). Allow HCI devices which operate in HCI_USER_CHANNEL mode to receive frames if the HCI device is is HCI_INIT state. [1] https://www.spinics.net/lists/linux-bluetooth/msg37345.html Fixes:23500189d7
("Bluetooth: Introduce new HCI socket channel for user operation") Signed-off-by: Mattijs Korpershoek <mkorpershoek@baylibre.com> Signed-off-by: Marcel Holtmann <marcel@holtmann.org> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
71aaa813ba
commit
512de42ed7
1 changed files with 8 additions and 1 deletions
|
@ -4330,7 +4330,14 @@ static void hci_rx_work(struct work_struct *work)
|
||||||
hci_send_to_sock(hdev, skb);
|
hci_send_to_sock(hdev, skb);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (hci_dev_test_flag(hdev, HCI_USER_CHANNEL)) {
|
/* If the device has been opened in HCI_USER_CHANNEL,
|
||||||
|
* the userspace has exclusive access to device.
|
||||||
|
* When device is HCI_INIT, we still need to process
|
||||||
|
* the data packets to the driver in order
|
||||||
|
* to complete its setup().
|
||||||
|
*/
|
||||||
|
if (hci_dev_test_flag(hdev, HCI_USER_CHANNEL) &&
|
||||||
|
!test_bit(HCI_INIT, &hdev->flags)) {
|
||||||
kfree_skb(skb);
|
kfree_skb(skb);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue