Bluetooth: Fix endianness handling of cmd_status/complete opcodes
authorJohan Hedberg <johan.hedberg@intel.com>
Sat, 9 Mar 2013 07:53:50 +0000 (09:53 +0200)
committerGustavo Padovan <gustavo.padovan@collabora.co.uk>
Sat, 9 Mar 2013 20:19:09 +0000 (17:19 -0300)
The opcode in cmd_complete and cmd_status events is 16 bits, so we
should only be comparing it after having converted it to the host
endianness. There's already an opcode variable in both functions which
is in host endiannes so the right fix is to just start using it instead
of ev->opcode.

Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
Signed-off-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk>
net/bluetooth/hci_event.c

index e89707f3394f3d8df473cf0f76bdce898a494a4c..d11b87bc1d1ada465c2c6e00b4d1b3745855cc84 100644 (file)
@@ -2299,10 +2299,10 @@ static void hci_cmd_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
                break;
        }
 
-       if (ev->opcode != HCI_OP_NOP)
+       if (opcode != HCI_OP_NOP)
                del_timer(&hdev->cmd_timer);
 
-       hci_req_cmd_complete(hdev, ev->opcode, status);
+       hci_req_cmd_complete(hdev, opcode, status);
 
        if (ev->ncmd && !test_bit(HCI_RESET, &hdev->flags)) {
                atomic_set(&hdev->cmd_cnt, 1);
@@ -2386,10 +2386,10 @@ static void hci_cmd_status_evt(struct hci_dev *hdev, struct sk_buff *skb)
                break;
        }
 
-       if (ev->opcode != HCI_OP_NOP)
+       if (opcode != HCI_OP_NOP)
                del_timer(&hdev->cmd_timer);
 
-       hci_req_cmd_status(hdev, ev->opcode, ev->status);
+       hci_req_cmd_status(hdev, opcode, ev->status);
 
        if (ev->ncmd && !test_bit(HCI_RESET, &hdev->flags)) {
                atomic_set(&hdev->cmd_cnt, 1);