Bluetooth: Add missing checks for HCI_ISODATA_PKT packet type
authorMarcel Holtmann <marcel@holtmann.org>
Sat, 25 Jan 2020 08:23:47 +0000 (09:23 +0100)
committerJohan Hedberg <johan.hedberg@intel.com>
Sat, 25 Jan 2020 14:33:46 +0000 (16:33 +0200)
The checks for HCI_ISODATA_PKT packet type are required in a few
additional locations to allow sending/receiving of this new packet type.

Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
net/bluetooth/hci_core.c
net/bluetooth/hci_sock.c

index 1ca7508..cbbc34a 100644 (file)
@@ -3565,7 +3565,8 @@ int hci_recv_frame(struct hci_dev *hdev, struct sk_buff *skb)
 
        if (hci_skb_pkt_type(skb) != HCI_EVENT_PKT &&
            hci_skb_pkt_type(skb) != HCI_ACLDATA_PKT &&
-           hci_skb_pkt_type(skb) != HCI_SCODATA_PKT) {
+           hci_skb_pkt_type(skb) != HCI_SCODATA_PKT &&
+           hci_skb_pkt_type(skb) != HCI_ISODATA_PKT) {
                kfree_skb(skb);
                return -EINVAL;
        }
@@ -4543,6 +4544,7 @@ static void hci_rx_work(struct work_struct *work)
                        switch (hci_skb_pkt_type(skb)) {
                        case HCI_ACLDATA_PKT:
                        case HCI_SCODATA_PKT:
+                       case HCI_ISODATA_PKT:
                                kfree_skb(skb);
                                continue;
                        }
index 3ae5086..5756b12 100644 (file)
@@ -211,7 +211,8 @@ void hci_send_to_sock(struct hci_dev *hdev, struct sk_buff *skb)
                        if (hci_skb_pkt_type(skb) != HCI_COMMAND_PKT &&
                            hci_skb_pkt_type(skb) != HCI_EVENT_PKT &&
                            hci_skb_pkt_type(skb) != HCI_ACLDATA_PKT &&
-                           hci_skb_pkt_type(skb) != HCI_SCODATA_PKT)
+                           hci_skb_pkt_type(skb) != HCI_SCODATA_PKT &&
+                           hci_skb_pkt_type(skb) != HCI_ISODATA_PKT)
                                continue;
                        if (is_filtered_packet(sk, skb))
                                continue;
@@ -220,7 +221,8 @@ void hci_send_to_sock(struct hci_dev *hdev, struct sk_buff *skb)
                                continue;
                        if (hci_skb_pkt_type(skb) != HCI_EVENT_PKT &&
                            hci_skb_pkt_type(skb) != HCI_ACLDATA_PKT &&
-                           hci_skb_pkt_type(skb) != HCI_SCODATA_PKT)
+                           hci_skb_pkt_type(skb) != HCI_SCODATA_PKT &&
+                           hci_skb_pkt_type(skb) != HCI_ISODATA_PKT)
                                continue;
                } else {
                        /* Don't send frame to other channel types */
@@ -1768,7 +1770,8 @@ static int hci_sock_sendmsg(struct socket *sock, struct msghdr *msg,
                 */
                if (hci_skb_pkt_type(skb) != HCI_COMMAND_PKT &&
                    hci_skb_pkt_type(skb) != HCI_ACLDATA_PKT &&
-                   hci_skb_pkt_type(skb) != HCI_SCODATA_PKT) {
+                   hci_skb_pkt_type(skb) != HCI_SCODATA_PKT &&
+                   hci_skb_pkt_type(skb) != HCI_ISODATA_PKT) {
                        err = -EINVAL;
                        goto drop;
                }
@@ -1812,7 +1815,8 @@ static int hci_sock_sendmsg(struct socket *sock, struct msghdr *msg,
                }
 
                if (hci_skb_pkt_type(skb) != HCI_ACLDATA_PKT &&
-                   hci_skb_pkt_type(skb) != HCI_SCODATA_PKT) {
+                   hci_skb_pkt_type(skb) != HCI_SCODATA_PKT &&
+                   hci_skb_pkt_type(skb) != HCI_ISODATA_PKT) {
                        err = -EINVAL;
                        goto drop;
                }