Bluetooth: btsdio: Check for valid packet type
authorLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
Wed, 15 Jan 2020 21:02:21 +0000 (13:02 -0800)
committerMarcel Holtmann <marcel@holtmann.org>
Wed, 15 Jan 2020 21:28:51 +0000 (22:28 +0100)
Check for valid packet type before calling hci_recv_frame which is
inline with what other drivers are doing.

Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
drivers/bluetooth/btsdio.c

index fd9571d..199e8f7 100644 (file)
@@ -145,11 +145,20 @@ static int btsdio_rx_packet(struct btsdio_data *data)
 
        data->hdev->stat.byte_rx += len;
 
-       hci_skb_pkt_type(skb) = hdr[3];
-
-       err = hci_recv_frame(data->hdev, skb);
-       if (err < 0)
-               return err;
+       switch (hdr[3]) {
+       case HCI_EVENT_PKT:
+       case HCI_ACLDATA_PKT:
+       case HCI_SCODATA_PKT:
+       case HCI_ISODATA_PKT:
+               hci_skb_pkt_type(skb) = hdr[3];
+               err = hci_recv_frame(data->hdev, skb);
+               if (err < 0)
+                       return err;
+               break;
+       default:
+               kfree_skb(skb);
+               return -EINVAL;
+       }
 
        sdio_writeb(data->func, 0x00, REG_PC_RRT, NULL);