浏览代码

Bluetooth: Fix endianness handling of cmd_status/complete opcodes

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>
Johan Hedberg 12 年之前
父节点
当前提交
ad82cdd196
共有 1 个文件被更改,包括 4 次插入4 次删除
  1. 4 4
      net/bluetooth/hci_event.c

+ 4 - 4
net/bluetooth/hci_event.c

@@ -2299,10 +2299,10 @@ static void hci_cmd_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
 		break;
 		break;
 	}
 	}
 
 
-	if (ev->opcode != HCI_OP_NOP)
+	if (opcode != HCI_OP_NOP)
 		del_timer(&hdev->cmd_timer);
 		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)) {
 	if (ev->ncmd && !test_bit(HCI_RESET, &hdev->flags)) {
 		atomic_set(&hdev->cmd_cnt, 1);
 		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;
 		break;
 	}
 	}
 
 
-	if (ev->opcode != HCI_OP_NOP)
+	if (opcode != HCI_OP_NOP)
 		del_timer(&hdev->cmd_timer);
 		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)) {
 	if (ev->ncmd && !test_bit(HCI_RESET, &hdev->flags)) {
 		atomic_set(&hdev->cmd_cnt, 1);
 		atomic_set(&hdev->cmd_cnt, 1);