diff options
author | David S. Miller <davem@davemloft.net> | 2006-11-21 19:17:41 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2006-11-21 19:17:41 -0500 |
commit | 4498c80d9c1ebdf42837be6a52ead35a2aa2b819 (patch) | |
tree | 38357ba0adae6b149abdd4d22c7137fc02e9f0c9 /net/bluetooth | |
parent | 785fd8b8a597519127c6d9e16e81f48af2ad391e (diff) |
[BLUETOOTH]: Fix unaligned access in hci_send_to_sock.
The "u16 *" derefs of skb->data need to be wrapped inside of
a get_unaligned().
Thanks to Gustavo Zacarias for the bug report.
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/bluetooth')
-rw-r--r-- | net/bluetooth/hci_sock.c | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/net/bluetooth/hci_sock.c b/net/bluetooth/hci_sock.c index f26a9eb49945..711a085eca5b 100644 --- a/net/bluetooth/hci_sock.c +++ b/net/bluetooth/hci_sock.c | |||
@@ -120,10 +120,13 @@ void hci_send_to_sock(struct hci_dev *hdev, struct sk_buff *skb) | |||
120 | if (!hci_test_bit(evt, &flt->event_mask)) | 120 | if (!hci_test_bit(evt, &flt->event_mask)) |
121 | continue; | 121 | continue; |
122 | 122 | ||
123 | if (flt->opcode && ((evt == HCI_EV_CMD_COMPLETE && | 123 | if (flt->opcode && |
124 | flt->opcode != *(__u16 *)(skb->data + 3)) || | 124 | ((evt == HCI_EV_CMD_COMPLETE && |
125 | (evt == HCI_EV_CMD_STATUS && | 125 | flt->opcode != |
126 | flt->opcode != *(__u16 *)(skb->data + 4)))) | 126 | get_unaligned((__u16 *)(skb->data + 3))) || |
127 | (evt == HCI_EV_CMD_STATUS && | ||
128 | flt->opcode != | ||
129 | get_unaligned((__u16 *)(skb->data + 4))))) | ||
127 | continue; | 130 | continue; |
128 | } | 131 | } |
129 | 132 | ||