Bluetooth: btusb: Fix new sparce warnings
authorLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
Mon, 5 Dec 2022 17:49:15 +0000 (09:49 -0800)
committerLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
Mon, 12 Dec 2022 22:19:25 +0000 (14:19 -0800)
This fix the following warnings detect with make W=1 C=1:

drivers/bluetooth/btusb.c:2212:9: warning: cast to restricted __le16
drivers/bluetooth/btusb.c:2212:9: warning: cast to restricted __le16
drivers/bluetooth/btusb.c:2245:18: warning: cast to restricted __le16
drivers/bluetooth/btusb.c:2249:18: warning: cast to restricted __le16
drivers/bluetooth/btusb.c:2253:18: warning: cast to restricted __le16
drivers/bluetooth/btusb.c:2257:18: warning: cast to restricted __le16
drivers/bluetooth/btusb.c:2261:18: warning: cast to restricted __le16
drivers/bluetooth/btusb.c:2267:18: warning: cast to restricted __le16

Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
drivers/bluetooth/btusb.c

index d57571c..422c878 100644 (file)
@@ -2201,18 +2201,19 @@ static int btusb_setup_csr(struct hci_dev *hdev)
                return err;
        }
 
-       if (skb->len != sizeof(struct hci_rp_read_local_version)) {
+       rp = skb_pull_data(skb, sizeof(*rp));
+       if (!rp) {
                bt_dev_err(hdev, "CSR: Local version length mismatch");
                kfree_skb(skb);
                return -EIO;
        }
 
-       rp = (struct hci_rp_read_local_version *)skb->data;
+       bt_dev_info(hdev, "CSR: Setting up dongle with HCI ver=%u rev=%04x",
+                   rp->hci_ver, le16_to_cpu(rp->hci_rev));
 
-       bt_dev_info(hdev, "CSR: Setting up dongle with HCI ver=%u rev=%04x; LMP ver=%u subver=%04x; manufacturer=%u",
-               le16_to_cpu(rp->hci_ver), le16_to_cpu(rp->hci_rev),
-               le16_to_cpu(rp->lmp_ver), le16_to_cpu(rp->lmp_subver),
-               le16_to_cpu(rp->manufacturer));
+       bt_dev_info(hdev, "LMP ver=%u subver=%04x; manufacturer=%u",
+                   rp->lmp_ver, le16_to_cpu(rp->lmp_subver),
+                   le16_to_cpu(rp->manufacturer));
 
        /* Detect a wide host of Chinese controllers that aren't CSR.
         *
@@ -2242,29 +2243,29 @@ static int btusb_setup_csr(struct hci_dev *hdev)
         *      third-party BT 4.0 dongle reuses it.
         */
        else if (le16_to_cpu(rp->lmp_subver) <= 0x034e &&
-                le16_to_cpu(rp->hci_ver) > BLUETOOTH_VER_1_1)
+                rp->hci_ver > BLUETOOTH_VER_1_1)
                is_fake = true;
 
        else if (le16_to_cpu(rp->lmp_subver) <= 0x0529 &&
-                le16_to_cpu(rp->hci_ver) > BLUETOOTH_VER_1_2)
+                rp->hci_ver > BLUETOOTH_VER_1_2)
                is_fake = true;
 
        else if (le16_to_cpu(rp->lmp_subver) <= 0x0c5c &&
-                le16_to_cpu(rp->hci_ver) > BLUETOOTH_VER_2_0)
+                rp->hci_ver > BLUETOOTH_VER_2_0)
                is_fake = true;
 
        else if (le16_to_cpu(rp->lmp_subver) <= 0x1899 &&
-                le16_to_cpu(rp->hci_ver) > BLUETOOTH_VER_2_1)
+                rp->hci_ver > BLUETOOTH_VER_2_1)
                is_fake = true;
 
        else if (le16_to_cpu(rp->lmp_subver) <= 0x22bb &&
-                le16_to_cpu(rp->hci_ver) > BLUETOOTH_VER_4_0)
+                rp->hci_ver > BLUETOOTH_VER_4_0)
                is_fake = true;
 
        /* Other clones which beat all the above checks */
        else if (bcdDevice == 0x0134 &&
                 le16_to_cpu(rp->lmp_subver) == 0x0c5c &&
-                le16_to_cpu(rp->hci_ver) == BLUETOOTH_VER_2_0)
+                rp->hci_ver == BLUETOOTH_VER_2_0)
                is_fake = true;
 
        if (is_fake) {