Bluetooth: Fix calculation of SCO handle for packet processing
authorMarcel Holtmann <marcel@holtmann.org>
Thu, 5 Mar 2020 15:28:39 +0000 (16:28 +0100)
committerJohan Hedberg <johan.hedberg@intel.com>
Sat, 7 Mar 2020 07:50:15 +0000 (09:50 +0200)
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>
net/bluetooth/hci_core.c

index 4e6d61a..6a88954 100644 (file)
@@ -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++;