diff options
Diffstat (limited to 'net/bluetooth/bnep')
-rw-r--r-- | net/bluetooth/bnep/bnep.h | 4 | ||||
-rw-r--r-- | net/bluetooth/bnep/core.c | 28 | ||||
-rw-r--r-- | net/bluetooth/bnep/netdev.c | 11 |
3 files changed, 22 insertions, 21 deletions
diff --git a/net/bluetooth/bnep/bnep.h b/net/bluetooth/bnep/bnep.h index bbb1ed7097a9..0b6cd0e2528d 100644 --- a/net/bluetooth/bnep/bnep.h +++ b/net/bluetooth/bnep/bnep.h | |||
@@ -95,14 +95,14 @@ struct bnep_setup_conn_req { | |||
95 | struct bnep_set_filter_req { | 95 | struct bnep_set_filter_req { |
96 | __u8 type; | 96 | __u8 type; |
97 | __u8 ctrl; | 97 | __u8 ctrl; |
98 | __u16 len; | 98 | __be16 len; |
99 | __u8 list[0]; | 99 | __u8 list[0]; |
100 | } __attribute__((packed)); | 100 | } __attribute__((packed)); |
101 | 101 | ||
102 | struct bnep_control_rsp { | 102 | struct bnep_control_rsp { |
103 | __u8 type; | 103 | __u8 type; |
104 | __u8 ctrl; | 104 | __u8 ctrl; |
105 | __u16 resp; | 105 | __be16 resp; |
106 | } __attribute__((packed)); | 106 | } __attribute__((packed)); |
107 | 107 | ||
108 | struct bnep_ext_hdr { | 108 | struct bnep_ext_hdr { |
diff --git a/net/bluetooth/bnep/core.c b/net/bluetooth/bnep/core.c index 4d3424c2421c..7ba6470dc507 100644 --- a/net/bluetooth/bnep/core.c +++ b/net/bluetooth/bnep/core.c | |||
@@ -117,18 +117,18 @@ static int bnep_send_rsp(struct bnep_session *s, u8 ctrl, u16 resp) | |||
117 | static inline void bnep_set_default_proto_filter(struct bnep_session *s) | 117 | static inline void bnep_set_default_proto_filter(struct bnep_session *s) |
118 | { | 118 | { |
119 | /* (IPv4, ARP) */ | 119 | /* (IPv4, ARP) */ |
120 | s->proto_filter[0].start = htons(0x0800); | 120 | s->proto_filter[0].start = ETH_P_IP; |
121 | s->proto_filter[0].end = htons(0x0806); | 121 | s->proto_filter[0].end = ETH_P_ARP; |
122 | /* (RARP, AppleTalk) */ | 122 | /* (RARP, AppleTalk) */ |
123 | s->proto_filter[1].start = htons(0x8035); | 123 | s->proto_filter[1].start = ETH_P_RARP; |
124 | s->proto_filter[1].end = htons(0x80F3); | 124 | s->proto_filter[1].end = ETH_P_AARP; |
125 | /* (IPX, IPv6) */ | 125 | /* (IPX, IPv6) */ |
126 | s->proto_filter[2].start = htons(0x8137); | 126 | s->proto_filter[2].start = ETH_P_IPX; |
127 | s->proto_filter[2].end = htons(0x86DD); | 127 | s->proto_filter[2].end = ETH_P_IPV6; |
128 | } | 128 | } |
129 | #endif | 129 | #endif |
130 | 130 | ||
131 | static int bnep_ctrl_set_netfilter(struct bnep_session *s, u16 *data, int len) | 131 | static int bnep_ctrl_set_netfilter(struct bnep_session *s, __be16 *data, int len) |
132 | { | 132 | { |
133 | int n; | 133 | int n; |
134 | 134 | ||
@@ -150,8 +150,8 @@ static int bnep_ctrl_set_netfilter(struct bnep_session *s, u16 *data, int len) | |||
150 | int i; | 150 | int i; |
151 | 151 | ||
152 | for (i = 0; i < n; i++) { | 152 | for (i = 0; i < n; i++) { |
153 | f[i].start = get_unaligned(data++); | 153 | f[i].start = ntohs(get_unaligned(data++)); |
154 | f[i].end = get_unaligned(data++); | 154 | f[i].end = ntohs(get_unaligned(data++)); |
155 | 155 | ||
156 | BT_DBG("proto filter start %d end %d", | 156 | BT_DBG("proto filter start %d end %d", |
157 | f[i].start, f[i].end); | 157 | f[i].start, f[i].end); |
@@ -180,7 +180,7 @@ static int bnep_ctrl_set_mcfilter(struct bnep_session *s, u8 *data, int len) | |||
180 | if (len < 2) | 180 | if (len < 2) |
181 | return -EILSEQ; | 181 | return -EILSEQ; |
182 | 182 | ||
183 | n = ntohs(get_unaligned((u16 *) data)); | 183 | n = ntohs(get_unaligned((__be16 *) data)); |
184 | data += 2; len -= 2; | 184 | data += 2; len -= 2; |
185 | 185 | ||
186 | if (len < n) | 186 | if (len < n) |
@@ -332,7 +332,7 @@ static inline int bnep_rx_frame(struct bnep_session *s, struct sk_buff *skb) | |||
332 | if (!skb_pull(skb, __bnep_rx_hlen[type & BNEP_TYPE_MASK])) | 332 | if (!skb_pull(skb, __bnep_rx_hlen[type & BNEP_TYPE_MASK])) |
333 | goto badframe; | 333 | goto badframe; |
334 | 334 | ||
335 | s->eh.h_proto = get_unaligned((u16 *) (skb->data - 2)); | 335 | s->eh.h_proto = get_unaligned((__be16 *) (skb->data - 2)); |
336 | 336 | ||
337 | if (type & BNEP_EXT_HEADER) { | 337 | if (type & BNEP_EXT_HEADER) { |
338 | if (bnep_rx_extension(s, skb) < 0) | 338 | if (bnep_rx_extension(s, skb) < 0) |
@@ -343,7 +343,7 @@ static inline int bnep_rx_frame(struct bnep_session *s, struct sk_buff *skb) | |||
343 | if (ntohs(s->eh.h_proto) == 0x8100) { | 343 | if (ntohs(s->eh.h_proto) == 0x8100) { |
344 | if (!skb_pull(skb, 4)) | 344 | if (!skb_pull(skb, 4)) |
345 | goto badframe; | 345 | goto badframe; |
346 | s->eh.h_proto = get_unaligned((u16 *) (skb->data - 2)); | 346 | s->eh.h_proto = get_unaligned((__be16 *) (skb->data - 2)); |
347 | } | 347 | } |
348 | 348 | ||
349 | /* We have to alloc new skb and copy data here :(. Because original skb | 349 | /* We have to alloc new skb and copy data here :(. Because original skb |
@@ -365,7 +365,7 @@ static inline int bnep_rx_frame(struct bnep_session *s, struct sk_buff *skb) | |||
365 | case BNEP_COMPRESSED_SRC_ONLY: | 365 | case BNEP_COMPRESSED_SRC_ONLY: |
366 | memcpy(__skb_put(nskb, ETH_ALEN), s->eh.h_dest, ETH_ALEN); | 366 | memcpy(__skb_put(nskb, ETH_ALEN), s->eh.h_dest, ETH_ALEN); |
367 | memcpy(__skb_put(nskb, ETH_ALEN), skb->mac.raw, ETH_ALEN); | 367 | memcpy(__skb_put(nskb, ETH_ALEN), skb->mac.raw, ETH_ALEN); |
368 | put_unaligned(s->eh.h_proto, (u16 *) __skb_put(nskb, 2)); | 368 | put_unaligned(s->eh.h_proto, (__be16 *) __skb_put(nskb, 2)); |
369 | break; | 369 | break; |
370 | 370 | ||
371 | case BNEP_COMPRESSED_DST_ONLY: | 371 | case BNEP_COMPRESSED_DST_ONLY: |
@@ -375,7 +375,7 @@ static inline int bnep_rx_frame(struct bnep_session *s, struct sk_buff *skb) | |||
375 | 375 | ||
376 | case BNEP_GENERAL: | 376 | case BNEP_GENERAL: |
377 | memcpy(__skb_put(nskb, ETH_ALEN * 2), skb->mac.raw, ETH_ALEN * 2); | 377 | memcpy(__skb_put(nskb, ETH_ALEN * 2), skb->mac.raw, ETH_ALEN * 2); |
378 | put_unaligned(s->eh.h_proto, (u16 *) __skb_put(nskb, 2)); | 378 | put_unaligned(s->eh.h_proto, (__be16 *) __skb_put(nskb, 2)); |
379 | break; | 379 | break; |
380 | } | 380 | } |
381 | 381 | ||
diff --git a/net/bluetooth/bnep/netdev.c b/net/bluetooth/bnep/netdev.c index 7f7b27db6a8f..67a002a9751a 100644 --- a/net/bluetooth/bnep/netdev.c +++ b/net/bluetooth/bnep/netdev.c | |||
@@ -158,14 +158,15 @@ static inline int bnep_net_mc_filter(struct sk_buff *skb, struct bnep_session *s | |||
158 | static inline u16 bnep_net_eth_proto(struct sk_buff *skb) | 158 | static inline u16 bnep_net_eth_proto(struct sk_buff *skb) |
159 | { | 159 | { |
160 | struct ethhdr *eh = (void *) skb->data; | 160 | struct ethhdr *eh = (void *) skb->data; |
161 | u16 proto = ntohs(eh->h_proto); | ||
161 | 162 | ||
162 | if (ntohs(eh->h_proto) >= 1536) | 163 | if (proto >= 1536) |
163 | return eh->h_proto; | 164 | return proto; |
164 | 165 | ||
165 | if (get_unaligned((u16 *) skb->data) == 0xFFFF) | 166 | if (get_unaligned((__be16 *) skb->data) == htons(0xFFFF)) |
166 | return htons(ETH_P_802_3); | 167 | return ETH_P_802_3; |
167 | 168 | ||
168 | return htons(ETH_P_802_2); | 169 | return ETH_P_802_2; |
169 | } | 170 | } |
170 | 171 | ||
171 | static inline int bnep_net_proto_filter(struct sk_buff *skb, struct bnep_session *s) | 172 | static inline int bnep_net_proto_filter(struct sk_buff *skb, struct bnep_session *s) |