diff options
author | Marcel Holtmann <marcel@holtmann.org> | 2020-03-05 16:28:39 +0100 |
---|---|---|
committer | Johan Hedberg <johan.hedberg@intel.com> | 2020-03-07 08:50:15 +0100 |
commit | debdedf2eb5a2d9777cabff40900772be13cd9f9 (patch) | |
tree | cea7fdac40de4bf339921fdf00099c9f7969c104 /net/bluetooth | |
parent | Bluetooth: hci_qca: Replace devm_gpiod_get() with devm_gpiod_get_optional() (diff) | |
download | linux-debdedf2eb5a2d9777cabff40900772be13cd9f9.tar.xz linux-debdedf2eb5a2d9777cabff40900772be13cd9f9.zip |
Bluetooth: Fix calculation of SCO handle for packet processing
When processing SCO packets, the handle is wrongly assumed as 16-bit
value. The actual size is 12-bits and the other 4-bits are used for
packet flags.
Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
Diffstat (limited to 'net/bluetooth')
-rw-r--r-- | net/bluetooth/hci_core.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/net/bluetooth/hci_core.c b/net/bluetooth/hci_core.c index 4e6d61a95b20..6a88954e67c0 100644 --- a/net/bluetooth/hci_core.c +++ b/net/bluetooth/hci_core.c @@ -4387,13 +4387,16 @@ static void hci_scodata_packet(struct hci_dev *hdev, struct sk_buff *skb) { struct hci_sco_hdr *hdr = (void *) skb->data; struct hci_conn *conn; - __u16 handle; + __u16 handle, flags; skb_pull(skb, HCI_SCO_HDR_SIZE); handle = __le16_to_cpu(hdr->handle); + flags = hci_flags(handle); + handle = hci_handle(handle); - BT_DBG("%s len %d handle 0x%4.4x", hdev->name, skb->len, handle); + BT_DBG("%s len %d handle 0x%4.4x flags 0x%4.4x", hdev->name, skb->len, + handle, flags); hdev->stat.sco_rx++; |