1
2
3
4
5
6
7
8
9
10
11
12#include <linux/jiffies.h>
13#include <linux/slab.h>
14#include <linux/kernel.h>
15#include <linux/skbuff.h>
16#include <linux/netdevice.h>
17#include <linux/etherdevice.h>
18#include <linux/rcupdate.h>
19#include <linux/export.h>
20#include <linux/bitops.h>
21#include <net/mac80211.h>
22#include <net/ieee80211_radiotap.h>
23#include <asm/unaligned.h>
24
25#include "ieee80211_i.h"
26#include "driver-ops.h"
27#include "led.h"
28#include "mesh.h"
29#include "wep.h"
30#include "wpa.h"
31#include "tkip.h"
32#include "wme.h"
33#include "rate.h"
34
35static inline void ieee80211_rx_stats(struct net_device *dev, u32 len)
36{
37 struct pcpu_sw_netstats *tstats = this_cpu_ptr(dev->tstats);
38
39 u64_stats_update_begin(&tstats->syncp);
40 tstats->rx_packets++;
41 tstats->rx_bytes += len;
42 u64_stats_update_end(&tstats->syncp);
43}
44
45static u8 *ieee80211_get_bssid(struct ieee80211_hdr *hdr, size_t len,
46 enum nl80211_iftype type)
47{
48 __le16 fc = hdr->frame_control;
49
50 if (ieee80211_is_data(fc)) {
51 if (len < 24)
52 return NULL;
53
54 if (ieee80211_has_a4(fc))
55 return NULL;
56 if (ieee80211_has_tods(fc))
57 return hdr->addr1;
58 if (ieee80211_has_fromds(fc))
59 return hdr->addr2;
60
61 return hdr->addr3;
62 }
63
64 if (ieee80211_is_mgmt(fc)) {
65 if (len < 24)
66 return NULL;
67 return hdr->addr3;
68 }
69
70 if (ieee80211_is_ctl(fc)) {
71 if (ieee80211_is_pspoll(fc))
72 return hdr->addr1;
73
74 if (ieee80211_is_back_req(fc)) {
75 switch (type) {
76 case NL80211_IFTYPE_STATION:
77 return hdr->addr2;
78 case NL80211_IFTYPE_AP:
79 case NL80211_IFTYPE_AP_VLAN:
80 return hdr->addr1;
81 default:
82 break;
83 }
84 }
85 }
86
87 return NULL;
88}
89
90
91
92
93
94
95
96static void remove_monitor_info(struct sk_buff *skb,
97 unsigned int present_fcs_len,
98 unsigned int rtap_space)
99{
100 if (present_fcs_len)
101 __pskb_trim(skb, skb->len - present_fcs_len);
102 __pskb_pull(skb, rtap_space);
103}
104
105static inline bool should_drop_frame(struct sk_buff *skb, int present_fcs_len,
106 unsigned int rtap_space)
107{
108 struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(skb);
109 struct ieee80211_hdr *hdr;
110
111 hdr = (void *)(skb->data + rtap_space);
112
113 if (status->flag & (RX_FLAG_FAILED_FCS_CRC |
114 RX_FLAG_FAILED_PLCP_CRC |
115 RX_FLAG_ONLY_MONITOR |
116 RX_FLAG_NO_PSDU))
117 return true;
118
119 if (unlikely(skb->len < 16 + present_fcs_len + rtap_space))
120 return true;
121
122 if (ieee80211_is_ctl(hdr->frame_control) &&
123 !ieee80211_is_pspoll(hdr->frame_control) &&
124 !ieee80211_is_back_req(hdr->frame_control))
125 return true;
126
127 return false;
128}
129
130static int
131ieee80211_rx_radiotap_hdrlen(struct ieee80211_local *local,
132 struct ieee80211_rx_status *status,
133 struct sk_buff *skb)
134{
135 int len;
136
137
138 len = sizeof(struct ieee80211_radiotap_header) + 8;
139
140
141 if (status->chains)
142 len += 4 * hweight8(status->chains);
143
144 if (status->flag & RX_FLAG_RADIOTAP_VENDOR_DATA)
145 len += 4;
146
147 if (ieee80211_have_rx_timestamp(status)) {
148 len = ALIGN(len, 8);
149 len += 8;
150 }
151 if (ieee80211_hw_check(&local->hw, SIGNAL_DBM))
152 len += 1;
153
154
155 if (!status->chains)
156 len += 1;
157
158
159 len = ALIGN(len, 2);
160
161 if (status->encoding == RX_ENC_HT)
162 len += 3;
163
164 if (status->flag & RX_FLAG_AMPDU_DETAILS) {
165 len = ALIGN(len, 4);
166 len += 8;
167 }
168
169 if (status->encoding == RX_ENC_VHT) {
170 len = ALIGN(len, 2);
171 len += 12;
172 }
173
174 if (local->hw.radiotap_timestamp.units_pos >= 0) {
175 len = ALIGN(len, 8);
176 len += 12;
177 }
178
179 if (status->encoding == RX_ENC_HE &&
180 status->flag & RX_FLAG_RADIOTAP_HE) {
181 len = ALIGN(len, 2);
182 len += 12;
183 BUILD_BUG_ON(sizeof(struct ieee80211_radiotap_he) != 12);
184 }
185
186 if (status->encoding == RX_ENC_HE &&
187 status->flag & RX_FLAG_RADIOTAP_HE_MU) {
188 len = ALIGN(len, 2);
189 len += 12;
190 BUILD_BUG_ON(sizeof(struct ieee80211_radiotap_he_mu) != 12);
191 }
192
193 if (status->flag & RX_FLAG_NO_PSDU)
194 len += 1;
195
196 if (status->flag & RX_FLAG_RADIOTAP_LSIG) {
197 len = ALIGN(len, 2);
198 len += 4;
199 BUILD_BUG_ON(sizeof(struct ieee80211_radiotap_lsig) != 4);
200 }
201
202 if (status->chains) {
203
204 len += 2 * hweight8(status->chains);
205 }
206
207 if (status->flag & RX_FLAG_RADIOTAP_VENDOR_DATA) {
208 struct ieee80211_vendor_radiotap *rtap;
209 int vendor_data_offset = 0;
210
211
212
213
214
215 if (status->flag & RX_FLAG_RADIOTAP_HE)
216 vendor_data_offset +=
217 sizeof(struct ieee80211_radiotap_he);
218 if (status->flag & RX_FLAG_RADIOTAP_HE_MU)
219 vendor_data_offset +=
220 sizeof(struct ieee80211_radiotap_he_mu);
221 if (status->flag & RX_FLAG_RADIOTAP_LSIG)
222 vendor_data_offset +=
223 sizeof(struct ieee80211_radiotap_lsig);
224
225 rtap = (void *)&skb->data[vendor_data_offset];
226
227
228 len = ALIGN(len, 2);
229
230 len += 6;
231 if (WARN_ON(rtap->align == 0))
232 rtap->align = 1;
233 len = ALIGN(len, rtap->align);
234 len += rtap->len + rtap->pad;
235 }
236
237 return len;
238}
239
240static void ieee80211_handle_mu_mimo_mon(struct ieee80211_sub_if_data *sdata,
241 struct sk_buff *skb,
242 int rtap_space)
243{
244 struct {
245 struct ieee80211_hdr_3addr hdr;
246 u8 category;
247 u8 action_code;
248 } __packed __aligned(2) action;
249
250 if (!sdata)
251 return;
252
253 BUILD_BUG_ON(sizeof(action) != IEEE80211_MIN_ACTION_SIZE + 1);
254
255 if (skb->len < rtap_space + sizeof(action) +
256 VHT_MUMIMO_GROUPS_DATA_LEN)
257 return;
258
259 if (!is_valid_ether_addr(sdata->u.mntr.mu_follow_addr))
260 return;
261
262 skb_copy_bits(skb, rtap_space, &action, sizeof(action));
263
264 if (!ieee80211_is_action(action.hdr.frame_control))
265 return;
266
267 if (action.category != WLAN_CATEGORY_VHT)
268 return;
269
270 if (action.action_code != WLAN_VHT_ACTION_GROUPID_MGMT)
271 return;
272
273 if (!ether_addr_equal(action.hdr.addr1, sdata->u.mntr.mu_follow_addr))
274 return;
275
276 skb = skb_copy(skb, GFP_ATOMIC);
277 if (!skb)
278 return;
279
280 skb_queue_tail(&sdata->skb_queue, skb);
281 ieee80211_queue_work(&sdata->local->hw, &sdata->work);
282}
283
284
285
286
287
288
289static void
290ieee80211_add_rx_radiotap_header(struct ieee80211_local *local,
291 struct sk_buff *skb,
292 struct ieee80211_rate *rate,
293 int rtap_len, bool has_fcs)
294{
295 struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(skb);
296 struct ieee80211_radiotap_header *rthdr;
297 unsigned char *pos;
298 __le32 *it_present;
299 u32 it_present_val;
300 u16 rx_flags = 0;
301 u16 channel_flags = 0;
302 int mpdulen, chain;
303 unsigned long chains = status->chains;
304 struct ieee80211_vendor_radiotap rtap = {};
305 struct ieee80211_radiotap_he he = {};
306 struct ieee80211_radiotap_he_mu he_mu = {};
307 struct ieee80211_radiotap_lsig lsig = {};
308
309 if (status->flag & RX_FLAG_RADIOTAP_HE) {
310 he = *(struct ieee80211_radiotap_he *)skb->data;
311 skb_pull(skb, sizeof(he));
312 WARN_ON_ONCE(status->encoding != RX_ENC_HE);
313 }
314
315 if (status->flag & RX_FLAG_RADIOTAP_HE_MU) {
316 he_mu = *(struct ieee80211_radiotap_he_mu *)skb->data;
317 skb_pull(skb, sizeof(he_mu));
318 }
319
320 if (status->flag & RX_FLAG_RADIOTAP_LSIG) {
321 lsig = *(struct ieee80211_radiotap_lsig *)skb->data;
322 skb_pull(skb, sizeof(lsig));
323 }
324
325 if (status->flag & RX_FLAG_RADIOTAP_VENDOR_DATA) {
326 rtap = *(struct ieee80211_vendor_radiotap *)skb->data;
327
328 skb_pull(skb, sizeof(rtap) + rtap.len + rtap.pad);
329 }
330
331 mpdulen = skb->len;
332 if (!(has_fcs && ieee80211_hw_check(&local->hw, RX_INCLUDES_FCS)))
333 mpdulen += FCS_LEN;
334
335 rthdr = skb_push(skb, rtap_len);
336 memset(rthdr, 0, rtap_len - rtap.len - rtap.pad);
337 it_present = &rthdr->it_present;
338
339
340 rthdr->it_len = cpu_to_le16(rtap_len);
341 it_present_val = BIT(IEEE80211_RADIOTAP_FLAGS) |
342 BIT(IEEE80211_RADIOTAP_CHANNEL) |
343 BIT(IEEE80211_RADIOTAP_RX_FLAGS);
344
345 if (!status->chains)
346 it_present_val |= BIT(IEEE80211_RADIOTAP_ANTENNA);
347
348 for_each_set_bit(chain, &chains, IEEE80211_MAX_CHAINS) {
349 it_present_val |=
350 BIT(IEEE80211_RADIOTAP_EXT) |
351 BIT(IEEE80211_RADIOTAP_RADIOTAP_NAMESPACE);
352 put_unaligned_le32(it_present_val, it_present);
353 it_present++;
354 it_present_val = BIT(IEEE80211_RADIOTAP_ANTENNA) |
355 BIT(IEEE80211_RADIOTAP_DBM_ANTSIGNAL);
356 }
357
358 if (status->flag & RX_FLAG_RADIOTAP_VENDOR_DATA) {
359 it_present_val |= BIT(IEEE80211_RADIOTAP_VENDOR_NAMESPACE) |
360 BIT(IEEE80211_RADIOTAP_EXT);
361 put_unaligned_le32(it_present_val, it_present);
362 it_present++;
363 it_present_val = rtap.present;
364 }
365
366 put_unaligned_le32(it_present_val, it_present);
367
368 pos = (void *)(it_present + 1);
369
370
371
372
373 if (ieee80211_have_rx_timestamp(status)) {
374
375 while ((pos - (u8 *)rthdr) & 7)
376 *pos++ = 0;
377 put_unaligned_le64(
378 ieee80211_calculate_rx_timestamp(local, status,
379 mpdulen, 0),
380 pos);
381 rthdr->it_present |= cpu_to_le32(1 << IEEE80211_RADIOTAP_TSFT);
382 pos += 8;
383 }
384
385
386 if (has_fcs && ieee80211_hw_check(&local->hw, RX_INCLUDES_FCS))
387 *pos |= IEEE80211_RADIOTAP_F_FCS;
388 if (status->flag & (RX_FLAG_FAILED_FCS_CRC | RX_FLAG_FAILED_PLCP_CRC))
389 *pos |= IEEE80211_RADIOTAP_F_BADFCS;
390 if (status->enc_flags & RX_ENC_FLAG_SHORTPRE)
391 *pos |= IEEE80211_RADIOTAP_F_SHORTPRE;
392 pos++;
393
394
395 if (!rate || status->encoding != RX_ENC_LEGACY) {
396
397
398
399
400
401
402 *pos = 0;
403 } else {
404 int shift = 0;
405 rthdr->it_present |= cpu_to_le32(1 << IEEE80211_RADIOTAP_RATE);
406 if (status->bw == RATE_INFO_BW_10)
407 shift = 1;
408 else if (status->bw == RATE_INFO_BW_5)
409 shift = 2;
410 *pos = DIV_ROUND_UP(rate->bitrate, 5 * (1 << shift));
411 }
412 pos++;
413
414
415 put_unaligned_le16(status->freq, pos);
416 pos += 2;
417 if (status->bw == RATE_INFO_BW_10)
418 channel_flags |= IEEE80211_CHAN_HALF;
419 else if (status->bw == RATE_INFO_BW_5)
420 channel_flags |= IEEE80211_CHAN_QUARTER;
421
422 if (status->band == NL80211_BAND_5GHZ)
423 channel_flags |= IEEE80211_CHAN_OFDM | IEEE80211_CHAN_5GHZ;
424 else if (status->encoding != RX_ENC_LEGACY)
425 channel_flags |= IEEE80211_CHAN_DYN | IEEE80211_CHAN_2GHZ;
426 else if (rate && rate->flags & IEEE80211_RATE_ERP_G)
427 channel_flags |= IEEE80211_CHAN_OFDM | IEEE80211_CHAN_2GHZ;
428 else if (rate)
429 channel_flags |= IEEE80211_CHAN_CCK | IEEE80211_CHAN_2GHZ;
430 else
431 channel_flags |= IEEE80211_CHAN_2GHZ;
432 put_unaligned_le16(channel_flags, pos);
433 pos += 2;
434
435
436 if (ieee80211_hw_check(&local->hw, SIGNAL_DBM) &&
437 !(status->flag & RX_FLAG_NO_SIGNAL_VAL)) {
438 *pos = status->signal;
439 rthdr->it_present |=
440 cpu_to_le32(1 << IEEE80211_RADIOTAP_DBM_ANTSIGNAL);
441 pos++;
442 }
443
444
445
446 if (!status->chains) {
447
448 *pos = status->antenna;
449 pos++;
450 }
451
452
453
454
455
456 if ((pos - (u8 *)rthdr) & 1)
457 *pos++ = 0;
458 if (status->flag & RX_FLAG_FAILED_PLCP_CRC)
459 rx_flags |= IEEE80211_RADIOTAP_F_RX_BADPLCP;
460 put_unaligned_le16(rx_flags, pos);
461 pos += 2;
462
463 if (status->encoding == RX_ENC_HT) {
464 unsigned int stbc;
465
466 rthdr->it_present |= cpu_to_le32(1 << IEEE80211_RADIOTAP_MCS);
467 *pos++ = local->hw.radiotap_mcs_details;
468 *pos = 0;
469 if (status->enc_flags & RX_ENC_FLAG_SHORT_GI)
470 *pos |= IEEE80211_RADIOTAP_MCS_SGI;
471 if (status->bw == RATE_INFO_BW_40)
472 *pos |= IEEE80211_RADIOTAP_MCS_BW_40;
473 if (status->enc_flags & RX_ENC_FLAG_HT_GF)
474 *pos |= IEEE80211_RADIOTAP_MCS_FMT_GF;
475 if (status->enc_flags & RX_ENC_FLAG_LDPC)
476 *pos |= IEEE80211_RADIOTAP_MCS_FEC_LDPC;
477 stbc = (status->enc_flags & RX_ENC_FLAG_STBC_MASK) >> RX_ENC_FLAG_STBC_SHIFT;
478 *pos |= stbc << IEEE80211_RADIOTAP_MCS_STBC_SHIFT;
479 pos++;
480 *pos++ = status->rate_idx;
481 }
482
483 if (status->flag & RX_FLAG_AMPDU_DETAILS) {
484 u16 flags = 0;
485
486
487 while ((pos - (u8 *)rthdr) & 3)
488 pos++;
489 rthdr->it_present |=
490 cpu_to_le32(1 << IEEE80211_RADIOTAP_AMPDU_STATUS);
491 put_unaligned_le32(status->ampdu_reference, pos);
492 pos += 4;
493 if (status->flag & RX_FLAG_AMPDU_LAST_KNOWN)
494 flags |= IEEE80211_RADIOTAP_AMPDU_LAST_KNOWN;
495 if (status->flag & RX_FLAG_AMPDU_IS_LAST)
496 flags |= IEEE80211_RADIOTAP_AMPDU_IS_LAST;
497 if (status->flag & RX_FLAG_AMPDU_DELIM_CRC_ERROR)
498 flags |= IEEE80211_RADIOTAP_AMPDU_DELIM_CRC_ERR;
499 if (status->flag & RX_FLAG_AMPDU_DELIM_CRC_KNOWN)
500 flags |= IEEE80211_RADIOTAP_AMPDU_DELIM_CRC_KNOWN;
501 if (status->flag & RX_FLAG_AMPDU_EOF_BIT_KNOWN)
502 flags |= IEEE80211_RADIOTAP_AMPDU_EOF_KNOWN;
503 if (status->flag & RX_FLAG_AMPDU_EOF_BIT)
504 flags |= IEEE80211_RADIOTAP_AMPDU_EOF;
505 put_unaligned_le16(flags, pos);
506 pos += 2;
507 if (status->flag & RX_FLAG_AMPDU_DELIM_CRC_KNOWN)
508 *pos++ = status->ampdu_delimiter_crc;
509 else
510 *pos++ = 0;
511 *pos++ = 0;
512 }
513
514 if (status->encoding == RX_ENC_VHT) {
515 u16 known = local->hw.radiotap_vht_details;
516
517 rthdr->it_present |= cpu_to_le32(1 << IEEE80211_RADIOTAP_VHT);
518 put_unaligned_le16(known, pos);
519 pos += 2;
520
521 if (status->enc_flags & RX_ENC_FLAG_SHORT_GI)
522 *pos |= IEEE80211_RADIOTAP_VHT_FLAG_SGI;
523
524 if (status->enc_flags & RX_ENC_FLAG_STBC_MASK)
525 *pos |= IEEE80211_RADIOTAP_VHT_FLAG_STBC;
526 if (status->enc_flags & RX_ENC_FLAG_BF)
527 *pos |= IEEE80211_RADIOTAP_VHT_FLAG_BEAMFORMED;
528 pos++;
529
530 switch (status->bw) {
531 case RATE_INFO_BW_80:
532 *pos++ = 4;
533 break;
534 case RATE_INFO_BW_160:
535 *pos++ = 11;
536 break;
537 case RATE_INFO_BW_40:
538 *pos++ = 1;
539 break;
540 default:
541 *pos++ = 0;
542 }
543
544 *pos = (status->rate_idx << 4) | status->nss;
545 pos += 4;
546
547 if (status->enc_flags & RX_ENC_FLAG_LDPC)
548 *pos |= IEEE80211_RADIOTAP_CODING_LDPC_USER0;
549 pos++;
550
551 pos++;
552
553 pos += 2;
554 }
555
556 if (local->hw.radiotap_timestamp.units_pos >= 0) {
557 u16 accuracy = 0;
558 u8 flags = IEEE80211_RADIOTAP_TIMESTAMP_FLAG_32BIT;
559
560 rthdr->it_present |=
561 cpu_to_le32(1 << IEEE80211_RADIOTAP_TIMESTAMP);
562
563
564 while ((pos - (u8 *)rthdr) & 7)
565 pos++;
566
567 put_unaligned_le64(status->device_timestamp, pos);
568 pos += sizeof(u64);
569
570 if (local->hw.radiotap_timestamp.accuracy >= 0) {
571 accuracy = local->hw.radiotap_timestamp.accuracy;
572 flags |= IEEE80211_RADIOTAP_TIMESTAMP_FLAG_ACCURACY;
573 }
574 put_unaligned_le16(accuracy, pos);
575 pos += sizeof(u16);
576
577 *pos++ = local->hw.radiotap_timestamp.units_pos;
578 *pos++ = flags;
579 }
580
581 if (status->encoding == RX_ENC_HE &&
582 status->flag & RX_FLAG_RADIOTAP_HE) {
583#define HE_PREP(f, val) le16_encode_bits(val, IEEE80211_RADIOTAP_HE_##f)
584
585 if (status->enc_flags & RX_ENC_FLAG_STBC_MASK) {
586 he.data6 |= HE_PREP(DATA6_NSTS,
587 FIELD_GET(RX_ENC_FLAG_STBC_MASK,
588 status->enc_flags));
589 he.data3 |= HE_PREP(DATA3_STBC, 1);
590 } else {
591 he.data6 |= HE_PREP(DATA6_NSTS, status->nss);
592 }
593
594#define CHECK_GI(s) \
595 BUILD_BUG_ON(IEEE80211_RADIOTAP_HE_DATA5_GI_##s != \
596 (int)NL80211_RATE_INFO_HE_GI_##s)
597
598 CHECK_GI(0_8);
599 CHECK_GI(1_6);
600 CHECK_GI(3_2);
601
602 he.data3 |= HE_PREP(DATA3_DATA_MCS, status->rate_idx);
603 he.data3 |= HE_PREP(DATA3_DATA_DCM, status->he_dcm);
604 he.data3 |= HE_PREP(DATA3_CODING,
605 !!(status->enc_flags & RX_ENC_FLAG_LDPC));
606
607 he.data5 |= HE_PREP(DATA5_GI, status->he_gi);
608
609 switch (status->bw) {
610 case RATE_INFO_BW_20:
611 he.data5 |= HE_PREP(DATA5_DATA_BW_RU_ALLOC,
612 IEEE80211_RADIOTAP_HE_DATA5_DATA_BW_RU_ALLOC_20MHZ);
613 break;
614 case RATE_INFO_BW_40:
615 he.data5 |= HE_PREP(DATA5_DATA_BW_RU_ALLOC,
616 IEEE80211_RADIOTAP_HE_DATA5_DATA_BW_RU_ALLOC_40MHZ);
617 break;
618 case RATE_INFO_BW_80:
619 he.data5 |= HE_PREP(DATA5_DATA_BW_RU_ALLOC,
620 IEEE80211_RADIOTAP_HE_DATA5_DATA_BW_RU_ALLOC_80MHZ);
621 break;
622 case RATE_INFO_BW_160:
623 he.data5 |= HE_PREP(DATA5_DATA_BW_RU_ALLOC,
624 IEEE80211_RADIOTAP_HE_DATA5_DATA_BW_RU_ALLOC_160MHZ);
625 break;
626 case RATE_INFO_BW_HE_RU:
627#define CHECK_RU_ALLOC(s) \
628 BUILD_BUG_ON(IEEE80211_RADIOTAP_HE_DATA5_DATA_BW_RU_ALLOC_##s##T != \
629 NL80211_RATE_INFO_HE_RU_ALLOC_##s + 4)
630
631 CHECK_RU_ALLOC(26);
632 CHECK_RU_ALLOC(52);
633 CHECK_RU_ALLOC(106);
634 CHECK_RU_ALLOC(242);
635 CHECK_RU_ALLOC(484);
636 CHECK_RU_ALLOC(996);
637 CHECK_RU_ALLOC(2x996);
638
639 he.data5 |= HE_PREP(DATA5_DATA_BW_RU_ALLOC,
640 status->he_ru + 4);
641 break;
642 default:
643 WARN_ONCE(1, "Invalid SU BW %d\n", status->bw);
644 }
645
646
647 while ((pos - (u8 *)rthdr) & 1)
648 pos++;
649 rthdr->it_present |= cpu_to_le32(1 << IEEE80211_RADIOTAP_HE);
650 memcpy(pos, &he, sizeof(he));
651 pos += sizeof(he);
652 }
653
654 if (status->encoding == RX_ENC_HE &&
655 status->flag & RX_FLAG_RADIOTAP_HE_MU) {
656
657 while ((pos - (u8 *)rthdr) & 1)
658 pos++;
659 rthdr->it_present |= cpu_to_le32(1 << IEEE80211_RADIOTAP_HE_MU);
660 memcpy(pos, &he_mu, sizeof(he_mu));
661 pos += sizeof(he_mu);
662 }
663
664 if (status->flag & RX_FLAG_NO_PSDU) {
665 rthdr->it_present |=
666 cpu_to_le32(1 << IEEE80211_RADIOTAP_ZERO_LEN_PSDU);
667 *pos++ = status->zero_length_psdu_type;
668 }
669
670 if (status->flag & RX_FLAG_RADIOTAP_LSIG) {
671
672 while ((pos - (u8 *)rthdr) & 1)
673 pos++;
674 rthdr->it_present |= cpu_to_le32(1 << IEEE80211_RADIOTAP_LSIG);
675 memcpy(pos, &lsig, sizeof(lsig));
676 pos += sizeof(lsig);
677 }
678
679 for_each_set_bit(chain, &chains, IEEE80211_MAX_CHAINS) {
680 *pos++ = status->chain_signal[chain];
681 *pos++ = chain;
682 }
683
684 if (status->flag & RX_FLAG_RADIOTAP_VENDOR_DATA) {
685
686 if ((pos - (u8 *)rthdr) & 1)
687 *pos++ = 0;
688 *pos++ = rtap.oui[0];
689 *pos++ = rtap.oui[1];
690 *pos++ = rtap.oui[2];
691 *pos++ = rtap.subns;
692 put_unaligned_le16(rtap.len, pos);
693 pos += 2;
694
695 while ((pos - (u8 *)rthdr) & (rtap.align - 1))
696 *pos++ = 0;
697
698 }
699}
700
701static struct sk_buff *
702ieee80211_make_monitor_skb(struct ieee80211_local *local,
703 struct sk_buff **origskb,
704 struct ieee80211_rate *rate,
705 int rtap_space, bool use_origskb)
706{
707 struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(*origskb);
708 int rt_hdrlen, needed_headroom;
709 struct sk_buff *skb;
710
711
712 rt_hdrlen = ieee80211_rx_radiotap_hdrlen(local, status, *origskb);
713 needed_headroom = rt_hdrlen - rtap_space;
714
715 if (use_origskb) {
716
717 skb = *origskb;
718 *origskb = NULL;
719
720
721
722
723
724
725
726
727 if (skb_headroom(skb) < needed_headroom &&
728 pskb_expand_head(skb, needed_headroom, 0, GFP_ATOMIC)) {
729 dev_kfree_skb(skb);
730 return NULL;
731 }
732 } else {
733
734
735
736
737 skb = skb_copy_expand(*origskb, needed_headroom, 0, GFP_ATOMIC);
738
739 if (!skb)
740 return NULL;
741 }
742
743
744 ieee80211_add_rx_radiotap_header(local, skb, rate, rt_hdrlen, true);
745
746 skb_reset_mac_header(skb);
747 skb->ip_summed = CHECKSUM_UNNECESSARY;
748 skb->pkt_type = PACKET_OTHERHOST;
749 skb->protocol = htons(ETH_P_802_2);
750
751 return skb;
752}
753
754
755
756
757
758
759static struct sk_buff *
760ieee80211_rx_monitor(struct ieee80211_local *local, struct sk_buff *origskb,
761 struct ieee80211_rate *rate)
762{
763 struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(origskb);
764 struct ieee80211_sub_if_data *sdata;
765 struct sk_buff *monskb = NULL;
766 int present_fcs_len = 0;
767 unsigned int rtap_space = 0;
768 struct ieee80211_sub_if_data *monitor_sdata =
769 rcu_dereference(local->monitor_sdata);
770 bool only_monitor = false;
771 unsigned int min_head_len;
772
773 if (status->flag & RX_FLAG_RADIOTAP_HE)
774 rtap_space += sizeof(struct ieee80211_radiotap_he);
775
776 if (status->flag & RX_FLAG_RADIOTAP_HE_MU)
777 rtap_space += sizeof(struct ieee80211_radiotap_he_mu);
778
779 if (status->flag & RX_FLAG_RADIOTAP_LSIG)
780 rtap_space += sizeof(struct ieee80211_radiotap_lsig);
781
782 if (unlikely(status->flag & RX_FLAG_RADIOTAP_VENDOR_DATA)) {
783 struct ieee80211_vendor_radiotap *rtap =
784 (void *)(origskb->data + rtap_space);
785
786 rtap_space += sizeof(*rtap) + rtap->len + rtap->pad;
787 }
788
789 min_head_len = rtap_space;
790
791
792
793
794
795
796
797
798
799
800 if (!(status->flag & RX_FLAG_NO_PSDU)) {
801 if (ieee80211_hw_check(&local->hw, RX_INCLUDES_FCS)) {
802 if (unlikely(origskb->len <= FCS_LEN + rtap_space)) {
803
804 WARN_ON(1);
805 dev_kfree_skb(origskb);
806 return NULL;
807 }
808 present_fcs_len = FCS_LEN;
809 }
810
811
812 min_head_len += 2;
813 }
814
815
816 if (!pskb_may_pull(origskb, min_head_len)) {
817 dev_kfree_skb(origskb);
818 return NULL;
819 }
820
821 only_monitor = should_drop_frame(origskb, present_fcs_len, rtap_space);
822
823 if (!local->monitors || (status->flag & RX_FLAG_SKIP_MONITOR)) {
824 if (only_monitor) {
825 dev_kfree_skb(origskb);
826 return NULL;
827 }
828
829 remove_monitor_info(origskb, present_fcs_len, rtap_space);
830 return origskb;
831 }
832
833 ieee80211_handle_mu_mimo_mon(monitor_sdata, origskb, rtap_space);
834
835 list_for_each_entry_rcu(sdata, &local->mon_list, u.mntr.list) {
836 bool last_monitor = list_is_last(&sdata->u.mntr.list,
837 &local->mon_list);
838
839 if (!monskb)
840 monskb = ieee80211_make_monitor_skb(local, &origskb,
841 rate, rtap_space,
842 only_monitor &&
843 last_monitor);
844
845 if (monskb) {
846 struct sk_buff *skb;
847
848 if (last_monitor) {
849 skb = monskb;
850 monskb = NULL;
851 } else {
852 skb = skb_clone(monskb, GFP_ATOMIC);
853 }
854
855 if (skb) {
856 skb->dev = sdata->dev;
857 ieee80211_rx_stats(skb->dev, skb->len);
858 netif_receive_skb(skb);
859 }
860 }
861
862 if (last_monitor)
863 break;
864 }
865
866
867 dev_kfree_skb(monskb);
868
869
870 if (!origskb)
871 return NULL;
872
873 remove_monitor_info(origskb, present_fcs_len, rtap_space);
874 return origskb;
875}
876
877static void ieee80211_parse_qos(struct ieee80211_rx_data *rx)
878{
879 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)rx->skb->data;
880 struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(rx->skb);
881 int tid, seqno_idx, security_idx;
882
883
884 if (ieee80211_is_data_qos(hdr->frame_control)) {
885 u8 *qc = ieee80211_get_qos_ctl(hdr);
886
887 tid = *qc & IEEE80211_QOS_CTL_TID_MASK;
888 if (*qc & IEEE80211_QOS_CTL_A_MSDU_PRESENT)
889 status->rx_flags |= IEEE80211_RX_AMSDU;
890
891 seqno_idx = tid;
892 security_idx = tid;
893 } else {
894
895
896
897
898
899
900
901
902
903
904
905 seqno_idx = IEEE80211_NUM_TIDS;
906 security_idx = 0;
907 if (ieee80211_is_mgmt(hdr->frame_control))
908 security_idx = IEEE80211_NUM_TIDS;
909 tid = 0;
910 }
911
912 rx->seqno_idx = seqno_idx;
913 rx->security_idx = security_idx;
914
915
916 rx->skb->priority = (tid > 7) ? 0 : tid;
917}
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944static void ieee80211_verify_alignment(struct ieee80211_rx_data *rx)
945{
946#ifdef CONFIG_MAC80211_VERBOSE_DEBUG
947 WARN_ON_ONCE((unsigned long)rx->skb->data & 1);
948#endif
949}
950
951
952
953
954static int ieee80211_is_unicast_robust_mgmt_frame(struct sk_buff *skb)
955{
956 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) skb->data;
957
958 if (is_multicast_ether_addr(hdr->addr1))
959 return 0;
960
961 return ieee80211_is_robust_mgmt_frame(skb);
962}
963
964
965static int ieee80211_is_multicast_robust_mgmt_frame(struct sk_buff *skb)
966{
967 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) skb->data;
968
969 if (!is_multicast_ether_addr(hdr->addr1))
970 return 0;
971
972 return ieee80211_is_robust_mgmt_frame(skb);
973}
974
975
976
977static int ieee80211_get_mmie_keyidx(struct sk_buff *skb)
978{
979 struct ieee80211_mgmt *hdr = (struct ieee80211_mgmt *) skb->data;
980 struct ieee80211_mmie *mmie;
981 struct ieee80211_mmie_16 *mmie16;
982
983 if (skb->len < 24 + sizeof(*mmie) || !is_multicast_ether_addr(hdr->da))
984 return -1;
985
986 if (!ieee80211_is_robust_mgmt_frame(skb))
987 return -1;
988
989 mmie = (struct ieee80211_mmie *)
990 (skb->data + skb->len - sizeof(*mmie));
991 if (mmie->element_id == WLAN_EID_MMIE &&
992 mmie->length == sizeof(*mmie) - 2)
993 return le16_to_cpu(mmie->key_id);
994
995 mmie16 = (struct ieee80211_mmie_16 *)
996 (skb->data + skb->len - sizeof(*mmie16));
997 if (skb->len >= 24 + sizeof(*mmie16) &&
998 mmie16->element_id == WLAN_EID_MMIE &&
999 mmie16->length == sizeof(*mmie16) - 2)
1000 return le16_to_cpu(mmie16->key_id);
1001
1002 return -1;
1003}
1004
1005static int ieee80211_get_keyid(struct sk_buff *skb,
1006 const struct ieee80211_cipher_scheme *cs)
1007{
1008 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
1009 __le16 fc;
1010 int hdrlen;
1011 int minlen;
1012 u8 key_idx_off;
1013 u8 key_idx_shift;
1014 u8 keyid;
1015
1016 fc = hdr->frame_control;
1017 hdrlen = ieee80211_hdrlen(fc);
1018
1019 if (cs) {
1020 minlen = hdrlen + cs->hdr_len;
1021 key_idx_off = hdrlen + cs->key_idx_off;
1022 key_idx_shift = cs->key_idx_shift;
1023 } else {
1024
1025 minlen = hdrlen + IEEE80211_WEP_IV_LEN;
1026 key_idx_off = hdrlen + 3;
1027 key_idx_shift = 6;
1028 }
1029
1030 if (unlikely(skb->len < minlen))
1031 return -EINVAL;
1032
1033 skb_copy_bits(skb, key_idx_off, &keyid, 1);
1034
1035 if (cs)
1036 keyid &= cs->key_idx_mask;
1037 keyid >>= key_idx_shift;
1038
1039
1040 if (unlikely(keyid >= NUM_DEFAULT_KEYS))
1041 return -EINVAL;
1042
1043 return keyid;
1044}
1045
1046static ieee80211_rx_result ieee80211_rx_mesh_check(struct ieee80211_rx_data *rx)
1047{
1048 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)rx->skb->data;
1049 char *dev_addr = rx->sdata->vif.addr;
1050
1051 if (ieee80211_is_data(hdr->frame_control)) {
1052 if (is_multicast_ether_addr(hdr->addr1)) {
1053 if (ieee80211_has_tods(hdr->frame_control) ||
1054 !ieee80211_has_fromds(hdr->frame_control))
1055 return RX_DROP_MONITOR;
1056 if (ether_addr_equal(hdr->addr3, dev_addr))
1057 return RX_DROP_MONITOR;
1058 } else {
1059 if (!ieee80211_has_a4(hdr->frame_control))
1060 return RX_DROP_MONITOR;
1061 if (ether_addr_equal(hdr->addr4, dev_addr))
1062 return RX_DROP_MONITOR;
1063 }
1064 }
1065
1066
1067
1068
1069
1070 if (!rx->sta || sta_plink_state(rx->sta) != NL80211_PLINK_ESTAB) {
1071 struct ieee80211_mgmt *mgmt;
1072
1073 if (!ieee80211_is_mgmt(hdr->frame_control))
1074 return RX_DROP_MONITOR;
1075
1076 if (ieee80211_is_action(hdr->frame_control)) {
1077 u8 category;
1078
1079
1080 if (rx->skb->len < IEEE80211_MIN_ACTION_SIZE)
1081 return RX_DROP_MONITOR;
1082
1083 mgmt = (struct ieee80211_mgmt *)hdr;
1084 category = mgmt->u.action.category;
1085 if (category != WLAN_CATEGORY_MESH_ACTION &&
1086 category != WLAN_CATEGORY_SELF_PROTECTED)
1087 return RX_DROP_MONITOR;
1088 return RX_CONTINUE;
1089 }
1090
1091 if (ieee80211_is_probe_req(hdr->frame_control) ||
1092 ieee80211_is_probe_resp(hdr->frame_control) ||
1093 ieee80211_is_beacon(hdr->frame_control) ||
1094 ieee80211_is_auth(hdr->frame_control))
1095 return RX_CONTINUE;
1096
1097 return RX_DROP_MONITOR;
1098 }
1099
1100 return RX_CONTINUE;
1101}
1102
1103static inline bool ieee80211_rx_reorder_ready(struct tid_ampdu_rx *tid_agg_rx,
1104 int index)
1105{
1106 struct sk_buff_head *frames = &tid_agg_rx->reorder_buf[index];
1107 struct sk_buff *tail = skb_peek_tail(frames);
1108 struct ieee80211_rx_status *status;
1109
1110 if (tid_agg_rx->reorder_buf_filtered & BIT_ULL(index))
1111 return true;
1112
1113 if (!tail)
1114 return false;
1115
1116 status = IEEE80211_SKB_RXCB(tail);
1117 if (status->flag & RX_FLAG_AMSDU_MORE)
1118 return false;
1119
1120 return true;
1121}
1122
1123static void ieee80211_release_reorder_frame(struct ieee80211_sub_if_data *sdata,
1124 struct tid_ampdu_rx *tid_agg_rx,
1125 int index,
1126 struct sk_buff_head *frames)
1127{
1128 struct sk_buff_head *skb_list = &tid_agg_rx->reorder_buf[index];
1129 struct sk_buff *skb;
1130 struct ieee80211_rx_status *status;
1131
1132 lockdep_assert_held(&tid_agg_rx->reorder_lock);
1133
1134 if (skb_queue_empty(skb_list))
1135 goto no_frame;
1136
1137 if (!ieee80211_rx_reorder_ready(tid_agg_rx, index)) {
1138 __skb_queue_purge(skb_list);
1139 goto no_frame;
1140 }
1141
1142
1143 tid_agg_rx->stored_mpdu_num--;
1144 while ((skb = __skb_dequeue(skb_list))) {
1145 status = IEEE80211_SKB_RXCB(skb);
1146 status->rx_flags |= IEEE80211_RX_DEFERRED_RELEASE;
1147 __skb_queue_tail(frames, skb);
1148 }
1149
1150no_frame:
1151 tid_agg_rx->reorder_buf_filtered &= ~BIT_ULL(index);
1152 tid_agg_rx->head_seq_num = ieee80211_sn_inc(tid_agg_rx->head_seq_num);
1153}
1154
1155static void ieee80211_release_reorder_frames(struct ieee80211_sub_if_data *sdata,
1156 struct tid_ampdu_rx *tid_agg_rx,
1157 u16 head_seq_num,
1158 struct sk_buff_head *frames)
1159{
1160 int index;
1161
1162 lockdep_assert_held(&tid_agg_rx->reorder_lock);
1163
1164 while (ieee80211_sn_less(tid_agg_rx->head_seq_num, head_seq_num)) {
1165 index = tid_agg_rx->head_seq_num % tid_agg_rx->buf_size;
1166 ieee80211_release_reorder_frame(sdata, tid_agg_rx, index,
1167 frames);
1168 }
1169}
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180#define HT_RX_REORDER_BUF_TIMEOUT (HZ / 10)
1181
1182static void ieee80211_sta_reorder_release(struct ieee80211_sub_if_data *sdata,
1183 struct tid_ampdu_rx *tid_agg_rx,
1184 struct sk_buff_head *frames)
1185{
1186 int index, i, j;
1187
1188 lockdep_assert_held(&tid_agg_rx->reorder_lock);
1189
1190
1191 index = tid_agg_rx->head_seq_num % tid_agg_rx->buf_size;
1192 if (!ieee80211_rx_reorder_ready(tid_agg_rx, index) &&
1193 tid_agg_rx->stored_mpdu_num) {
1194
1195
1196
1197
1198 int skipped = 1;
1199 for (j = (index + 1) % tid_agg_rx->buf_size; j != index;
1200 j = (j + 1) % tid_agg_rx->buf_size) {
1201 if (!ieee80211_rx_reorder_ready(tid_agg_rx, j)) {
1202 skipped++;
1203 continue;
1204 }
1205 if (skipped &&
1206 !time_after(jiffies, tid_agg_rx->reorder_time[j] +
1207 HT_RX_REORDER_BUF_TIMEOUT))
1208 goto set_release_timer;
1209
1210
1211 for (i = (index + 1) % tid_agg_rx->buf_size; i != j;
1212 i = (i + 1) % tid_agg_rx->buf_size)
1213 __skb_queue_purge(&tid_agg_rx->reorder_buf[i]);
1214
1215 ht_dbg_ratelimited(sdata,
1216 "release an RX reorder frame due to timeout on earlier frames\n");
1217 ieee80211_release_reorder_frame(sdata, tid_agg_rx, j,
1218 frames);
1219
1220
1221
1222
1223 tid_agg_rx->head_seq_num =
1224 (tid_agg_rx->head_seq_num +
1225 skipped) & IEEE80211_SN_MASK;
1226 skipped = 0;
1227 }
1228 } else while (ieee80211_rx_reorder_ready(tid_agg_rx, index)) {
1229 ieee80211_release_reorder_frame(sdata, tid_agg_rx, index,
1230 frames);
1231 index = tid_agg_rx->head_seq_num % tid_agg_rx->buf_size;
1232 }
1233
1234 if (tid_agg_rx->stored_mpdu_num) {
1235 j = index = tid_agg_rx->head_seq_num % tid_agg_rx->buf_size;
1236
1237 for (; j != (index - 1) % tid_agg_rx->buf_size;
1238 j = (j + 1) % tid_agg_rx->buf_size) {
1239 if (ieee80211_rx_reorder_ready(tid_agg_rx, j))
1240 break;
1241 }
1242
1243 set_release_timer:
1244
1245 if (!tid_agg_rx->removed)
1246 mod_timer(&tid_agg_rx->reorder_timer,
1247 tid_agg_rx->reorder_time[j] + 1 +
1248 HT_RX_REORDER_BUF_TIMEOUT);
1249 } else {
1250 del_timer(&tid_agg_rx->reorder_timer);
1251 }
1252}
1253
1254
1255
1256
1257
1258
1259static bool ieee80211_sta_manage_reorder_buf(struct ieee80211_sub_if_data *sdata,
1260 struct tid_ampdu_rx *tid_agg_rx,
1261 struct sk_buff *skb,
1262 struct sk_buff_head *frames)
1263{
1264 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) skb->data;
1265 struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(skb);
1266 u16 sc = le16_to_cpu(hdr->seq_ctrl);
1267 u16 mpdu_seq_num = (sc & IEEE80211_SCTL_SEQ) >> 4;
1268 u16 head_seq_num, buf_size;
1269 int index;
1270 bool ret = true;
1271
1272 spin_lock(&tid_agg_rx->reorder_lock);
1273
1274
1275
1276
1277
1278 if (unlikely(tid_agg_rx->auto_seq)) {
1279 tid_agg_rx->auto_seq = false;
1280 tid_agg_rx->ssn = mpdu_seq_num;
1281 tid_agg_rx->head_seq_num = mpdu_seq_num;
1282 }
1283
1284 buf_size = tid_agg_rx->buf_size;
1285 head_seq_num = tid_agg_rx->head_seq_num;
1286
1287
1288
1289
1290
1291 if (unlikely(!tid_agg_rx->started)) {
1292 if (ieee80211_sn_less(mpdu_seq_num, head_seq_num)) {
1293 ret = false;
1294 goto out;
1295 }
1296 tid_agg_rx->started = true;
1297 }
1298
1299
1300 if (ieee80211_sn_less(mpdu_seq_num, head_seq_num)) {
1301 dev_kfree_skb(skb);
1302 goto out;
1303 }
1304
1305
1306
1307
1308
1309 if (!ieee80211_sn_less(mpdu_seq_num, head_seq_num + buf_size)) {
1310 head_seq_num = ieee80211_sn_inc(
1311 ieee80211_sn_sub(mpdu_seq_num, buf_size));
1312
1313 ieee80211_release_reorder_frames(sdata, tid_agg_rx,
1314 head_seq_num, frames);
1315 }
1316
1317
1318
1319 index = mpdu_seq_num % tid_agg_rx->buf_size;
1320
1321
1322 if (ieee80211_rx_reorder_ready(tid_agg_rx, index)) {
1323 dev_kfree_skb(skb);
1324 goto out;
1325 }
1326
1327
1328
1329
1330
1331
1332
1333 if (mpdu_seq_num == tid_agg_rx->head_seq_num &&
1334 tid_agg_rx->stored_mpdu_num == 0) {
1335 if (!(status->flag & RX_FLAG_AMSDU_MORE))
1336 tid_agg_rx->head_seq_num =
1337 ieee80211_sn_inc(tid_agg_rx->head_seq_num);
1338 ret = false;
1339 goto out;
1340 }
1341
1342
1343 __skb_queue_tail(&tid_agg_rx->reorder_buf[index], skb);
1344 if (!(status->flag & RX_FLAG_AMSDU_MORE)) {
1345 tid_agg_rx->reorder_time[index] = jiffies;
1346 tid_agg_rx->stored_mpdu_num++;
1347 ieee80211_sta_reorder_release(sdata, tid_agg_rx, frames);
1348 }
1349
1350 out:
1351 spin_unlock(&tid_agg_rx->reorder_lock);
1352 return ret;
1353}
1354
1355
1356
1357
1358
1359static void ieee80211_rx_reorder_ampdu(struct ieee80211_rx_data *rx,
1360 struct sk_buff_head *frames)
1361{
1362 struct sk_buff *skb = rx->skb;
1363 struct ieee80211_local *local = rx->local;
1364 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) skb->data;
1365 struct sta_info *sta = rx->sta;
1366 struct tid_ampdu_rx *tid_agg_rx;
1367 u16 sc;
1368 u8 tid, ack_policy;
1369
1370 if (!ieee80211_is_data_qos(hdr->frame_control) ||
1371 is_multicast_ether_addr(hdr->addr1))
1372 goto dont_reorder;
1373
1374
1375
1376
1377
1378
1379 if (!sta)
1380 goto dont_reorder;
1381
1382 ack_policy = *ieee80211_get_qos_ctl(hdr) &
1383 IEEE80211_QOS_CTL_ACK_POLICY_MASK;
1384 tid = ieee80211_get_tid(hdr);
1385
1386 tid_agg_rx = rcu_dereference(sta->ampdu_mlme.tid_rx[tid]);
1387 if (!tid_agg_rx) {
1388 if (ack_policy == IEEE80211_QOS_CTL_ACK_POLICY_BLOCKACK &&
1389 !test_bit(tid, rx->sta->ampdu_mlme.agg_session_valid) &&
1390 !test_and_set_bit(tid, rx->sta->ampdu_mlme.unexpected_agg))
1391 ieee80211_send_delba(rx->sdata, rx->sta->sta.addr, tid,
1392 WLAN_BACK_RECIPIENT,
1393 WLAN_REASON_QSTA_REQUIRE_SETUP);
1394 goto dont_reorder;
1395 }
1396
1397
1398 if (unlikely(hdr->frame_control & cpu_to_le16(IEEE80211_STYPE_NULLFUNC)))
1399 goto dont_reorder;
1400
1401
1402 if (ack_policy != IEEE80211_QOS_CTL_ACK_POLICY_BLOCKACK &&
1403 ack_policy != IEEE80211_QOS_CTL_ACK_POLICY_NORMAL)
1404 goto dont_reorder;
1405
1406
1407
1408
1409 if (tid_agg_rx->timeout)
1410 tid_agg_rx->last_rx = jiffies;
1411
1412
1413 sc = le16_to_cpu(hdr->seq_ctrl);
1414 if (sc & IEEE80211_SCTL_FRAG) {
1415 skb_queue_tail(&rx->sdata->skb_queue, skb);
1416 ieee80211_queue_work(&local->hw, &rx->sdata->work);
1417 return;
1418 }
1419
1420
1421
1422
1423
1424
1425
1426
1427 if (ieee80211_sta_manage_reorder_buf(rx->sdata, tid_agg_rx, skb,
1428 frames))
1429 return;
1430
1431 dont_reorder:
1432 __skb_queue_tail(frames, skb);
1433}
1434
1435static ieee80211_rx_result debug_noinline
1436ieee80211_rx_h_check_dup(struct ieee80211_rx_data *rx)
1437{
1438 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)rx->skb->data;
1439 struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(rx->skb);
1440
1441 if (status->flag & RX_FLAG_DUP_VALIDATED)
1442 return RX_CONTINUE;
1443
1444
1445
1446
1447
1448
1449 if (rx->skb->len < 24)
1450 return RX_CONTINUE;
1451
1452 if (ieee80211_is_ctl(hdr->frame_control) ||
1453 ieee80211_is_nullfunc(hdr->frame_control) ||
1454 ieee80211_is_qos_nullfunc(hdr->frame_control) ||
1455 is_multicast_ether_addr(hdr->addr1))
1456 return RX_CONTINUE;
1457
1458 if (!rx->sta)
1459 return RX_CONTINUE;
1460
1461 if (unlikely(ieee80211_has_retry(hdr->frame_control) &&
1462 rx->sta->last_seq_ctrl[rx->seqno_idx] == hdr->seq_ctrl)) {
1463 I802_DEBUG_INC(rx->local->dot11FrameDuplicateCount);
1464 rx->sta->rx_stats.num_duplicates++;
1465 return RX_DROP_UNUSABLE;
1466 } else if (!(status->flag & RX_FLAG_AMSDU_MORE)) {
1467 rx->sta->last_seq_ctrl[rx->seqno_idx] = hdr->seq_ctrl;
1468 }
1469
1470 return RX_CONTINUE;
1471}
1472
1473static ieee80211_rx_result debug_noinline
1474ieee80211_rx_h_check(struct ieee80211_rx_data *rx)
1475{
1476 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)rx->skb->data;
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487 if (ieee80211_vif_is_mesh(&rx->sdata->vif))
1488 return ieee80211_rx_mesh_check(rx);
1489
1490 if (unlikely((ieee80211_is_data(hdr->frame_control) ||
1491 ieee80211_is_pspoll(hdr->frame_control)) &&
1492 rx->sdata->vif.type != NL80211_IFTYPE_ADHOC &&
1493 rx->sdata->vif.type != NL80211_IFTYPE_WDS &&
1494 rx->sdata->vif.type != NL80211_IFTYPE_OCB &&
1495 (!rx->sta || !test_sta_flag(rx->sta, WLAN_STA_ASSOC)))) {
1496
1497
1498
1499
1500
1501 if (rx->sta && rx->sdata->vif.type == NL80211_IFTYPE_STATION &&
1502 ieee80211_is_data_present(hdr->frame_control)) {
1503 unsigned int hdrlen;
1504 __be16 ethertype;
1505
1506 hdrlen = ieee80211_hdrlen(hdr->frame_control);
1507
1508 if (rx->skb->len < hdrlen + 8)
1509 return RX_DROP_MONITOR;
1510
1511 skb_copy_bits(rx->skb, hdrlen + 6, ðertype, 2);
1512 if (ethertype == rx->sdata->control_port_protocol)
1513 return RX_CONTINUE;
1514 }
1515
1516 if (rx->sdata->vif.type == NL80211_IFTYPE_AP &&
1517 cfg80211_rx_spurious_frame(rx->sdata->dev,
1518 hdr->addr2,
1519 GFP_ATOMIC))
1520 return RX_DROP_UNUSABLE;
1521
1522 return RX_DROP_MONITOR;
1523 }
1524
1525 return RX_CONTINUE;
1526}
1527
1528
1529static ieee80211_rx_result debug_noinline
1530ieee80211_rx_h_check_more_data(struct ieee80211_rx_data *rx)
1531{
1532 struct ieee80211_local *local;
1533 struct ieee80211_hdr *hdr;
1534 struct sk_buff *skb;
1535
1536 local = rx->local;
1537 skb = rx->skb;
1538 hdr = (struct ieee80211_hdr *) skb->data;
1539
1540 if (!local->pspolling)
1541 return RX_CONTINUE;
1542
1543 if (!ieee80211_has_fromds(hdr->frame_control))
1544
1545 return RX_CONTINUE;
1546
1547 if (!ieee80211_is_data(hdr->frame_control))
1548 return RX_CONTINUE;
1549
1550 if (!ieee80211_has_moredata(hdr->frame_control)) {
1551
1552 local->pspolling = false;
1553 return RX_CONTINUE;
1554 }
1555
1556
1557 ieee80211_send_pspoll(local, rx->sdata);
1558
1559 return RX_CONTINUE;
1560}
1561
1562static void sta_ps_start(struct sta_info *sta)
1563{
1564 struct ieee80211_sub_if_data *sdata = sta->sdata;
1565 struct ieee80211_local *local = sdata->local;
1566 struct ps_data *ps;
1567 int tid;
1568
1569 if (sta->sdata->vif.type == NL80211_IFTYPE_AP ||
1570 sta->sdata->vif.type == NL80211_IFTYPE_AP_VLAN)
1571 ps = &sdata->bss->ps;
1572 else
1573 return;
1574
1575 atomic_inc(&ps->num_sta_ps);
1576 set_sta_flag(sta, WLAN_STA_PS_STA);
1577 if (!ieee80211_hw_check(&local->hw, AP_LINK_PS))
1578 drv_sta_notify(local, sdata, STA_NOTIFY_SLEEP, &sta->sta);
1579 ps_dbg(sdata, "STA %pM aid %d enters power save mode\n",
1580 sta->sta.addr, sta->sta.aid);
1581
1582 ieee80211_clear_fast_xmit(sta);
1583
1584 if (!sta->sta.txq[0])
1585 return;
1586
1587 for (tid = 0; tid < IEEE80211_NUM_TIDS; tid++) {
1588 struct ieee80211_txq *txq = sta->sta.txq[tid];
1589 struct txq_info *txqi = to_txq_info(txq);
1590
1591 spin_lock(&local->active_txq_lock[txq->ac]);
1592 if (!list_empty(&txqi->schedule_order))
1593 list_del_init(&txqi->schedule_order);
1594 spin_unlock(&local->active_txq_lock[txq->ac]);
1595
1596 if (txq_has_queue(txq))
1597 set_bit(tid, &sta->txq_buffered_tids);
1598 else
1599 clear_bit(tid, &sta->txq_buffered_tids);
1600 }
1601}
1602
1603static void sta_ps_end(struct sta_info *sta)
1604{
1605 ps_dbg(sta->sdata, "STA %pM aid %d exits power save mode\n",
1606 sta->sta.addr, sta->sta.aid);
1607
1608 if (test_sta_flag(sta, WLAN_STA_PS_DRIVER)) {
1609
1610
1611
1612
1613
1614
1615 clear_sta_flag(sta, WLAN_STA_PS_STA);
1616 ps_dbg(sta->sdata, "STA %pM aid %d driver-ps-blocked\n",
1617 sta->sta.addr, sta->sta.aid);
1618 return;
1619 }
1620
1621 set_sta_flag(sta, WLAN_STA_PS_DELIVER);
1622 clear_sta_flag(sta, WLAN_STA_PS_STA);
1623 ieee80211_sta_ps_deliver_wakeup(sta);
1624}
1625
1626int ieee80211_sta_ps_transition(struct ieee80211_sta *pubsta, bool start)
1627{
1628 struct sta_info *sta = container_of(pubsta, struct sta_info, sta);
1629 bool in_ps;
1630
1631 WARN_ON(!ieee80211_hw_check(&sta->local->hw, AP_LINK_PS));
1632
1633
1634 in_ps = test_sta_flag(sta, WLAN_STA_PS_STA);
1635 if ((start && in_ps) || (!start && !in_ps))
1636 return -EINVAL;
1637
1638 if (start)
1639 sta_ps_start(sta);
1640 else
1641 sta_ps_end(sta);
1642
1643 return 0;
1644}
1645EXPORT_SYMBOL(ieee80211_sta_ps_transition);
1646
1647void ieee80211_sta_pspoll(struct ieee80211_sta *pubsta)
1648{
1649 struct sta_info *sta = container_of(pubsta, struct sta_info, sta);
1650
1651 if (test_sta_flag(sta, WLAN_STA_SP))
1652 return;
1653
1654 if (!test_sta_flag(sta, WLAN_STA_PS_DRIVER))
1655 ieee80211_sta_ps_deliver_poll_response(sta);
1656 else
1657 set_sta_flag(sta, WLAN_STA_PSPOLL);
1658}
1659EXPORT_SYMBOL(ieee80211_sta_pspoll);
1660
1661void ieee80211_sta_uapsd_trigger(struct ieee80211_sta *pubsta, u8 tid)
1662{
1663 struct sta_info *sta = container_of(pubsta, struct sta_info, sta);
1664 int ac = ieee80211_ac_from_tid(tid);
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674 if (!(sta->sta.uapsd_queues & ieee80211_ac_to_qos_mask[ac]) &&
1675 tid != IEEE80211_NUM_TIDS)
1676 return;
1677
1678
1679 if (test_sta_flag(sta, WLAN_STA_SP))
1680 return;
1681
1682 if (!test_sta_flag(sta, WLAN_STA_PS_DRIVER))
1683 ieee80211_sta_ps_deliver_uapsd(sta);
1684 else
1685 set_sta_flag(sta, WLAN_STA_UAPSD);
1686}
1687EXPORT_SYMBOL(ieee80211_sta_uapsd_trigger);
1688
1689static ieee80211_rx_result debug_noinline
1690ieee80211_rx_h_uapsd_and_pspoll(struct ieee80211_rx_data *rx)
1691{
1692 struct ieee80211_sub_if_data *sdata = rx->sdata;
1693 struct ieee80211_hdr *hdr = (void *)rx->skb->data;
1694 struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(rx->skb);
1695
1696 if (!rx->sta)
1697 return RX_CONTINUE;
1698
1699 if (sdata->vif.type != NL80211_IFTYPE_AP &&
1700 sdata->vif.type != NL80211_IFTYPE_AP_VLAN)
1701 return RX_CONTINUE;
1702
1703
1704
1705
1706
1707
1708 if (ieee80211_hw_check(&sdata->local->hw, AP_LINK_PS))
1709 return RX_CONTINUE;
1710
1711
1712
1713
1714
1715
1716 if (!test_sta_flag(rx->sta, WLAN_STA_PS_STA))
1717 return RX_CONTINUE;
1718
1719 if (unlikely(ieee80211_is_pspoll(hdr->frame_control))) {
1720 ieee80211_sta_pspoll(&rx->sta->sta);
1721
1722
1723
1724 dev_kfree_skb(rx->skb);
1725
1726 return RX_QUEUED;
1727 } else if (!ieee80211_has_morefrags(hdr->frame_control) &&
1728 !(status->rx_flags & IEEE80211_RX_DEFERRED_RELEASE) &&
1729 ieee80211_has_pm(hdr->frame_control) &&
1730 (ieee80211_is_data_qos(hdr->frame_control) ||
1731 ieee80211_is_qos_nullfunc(hdr->frame_control))) {
1732 u8 tid = ieee80211_get_tid(hdr);
1733
1734 ieee80211_sta_uapsd_trigger(&rx->sta->sta, tid);
1735 }
1736
1737 return RX_CONTINUE;
1738}
1739
1740static ieee80211_rx_result debug_noinline
1741ieee80211_rx_h_sta_process(struct ieee80211_rx_data *rx)
1742{
1743 struct sta_info *sta = rx->sta;
1744 struct sk_buff *skb = rx->skb;
1745 struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(skb);
1746 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
1747 int i;
1748
1749 if (!sta)
1750 return RX_CONTINUE;
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760 if (rx->sdata->vif.type == NL80211_IFTYPE_ADHOC) {
1761 u8 *bssid = ieee80211_get_bssid(hdr, rx->skb->len,
1762 NL80211_IFTYPE_ADHOC);
1763 if (ether_addr_equal(bssid, rx->sdata->u.ibss.bssid) &&
1764 test_sta_flag(sta, WLAN_STA_AUTHORIZED)) {
1765 sta->rx_stats.last_rx = jiffies;
1766 if (ieee80211_is_data(hdr->frame_control) &&
1767 !is_multicast_ether_addr(hdr->addr1))
1768 sta->rx_stats.last_rate =
1769 sta_stats_encode_rate(status);
1770 }
1771 } else if (rx->sdata->vif.type == NL80211_IFTYPE_OCB) {
1772 sta->rx_stats.last_rx = jiffies;
1773 } else if (!is_multicast_ether_addr(hdr->addr1)) {
1774
1775
1776
1777
1778 sta->rx_stats.last_rx = jiffies;
1779 if (ieee80211_is_data(hdr->frame_control))
1780 sta->rx_stats.last_rate = sta_stats_encode_rate(status);
1781 }
1782
1783 if (rx->sdata->vif.type == NL80211_IFTYPE_STATION)
1784 ieee80211_sta_rx_notify(rx->sdata, hdr);
1785
1786 sta->rx_stats.fragments++;
1787
1788 u64_stats_update_begin(&rx->sta->rx_stats.syncp);
1789 sta->rx_stats.bytes += rx->skb->len;
1790 u64_stats_update_end(&rx->sta->rx_stats.syncp);
1791
1792 if (!(status->flag & RX_FLAG_NO_SIGNAL_VAL)) {
1793 sta->rx_stats.last_signal = status->signal;
1794 ewma_signal_add(&sta->rx_stats_avg.signal, -status->signal);
1795 }
1796
1797 if (status->chains) {
1798 sta->rx_stats.chains = status->chains;
1799 for (i = 0; i < ARRAY_SIZE(status->chain_signal); i++) {
1800 int signal = status->chain_signal[i];
1801
1802 if (!(status->chains & BIT(i)))
1803 continue;
1804
1805 sta->rx_stats.chain_signal_last[i] = signal;
1806 ewma_signal_add(&sta->rx_stats_avg.chain_signal[i],
1807 -signal);
1808 }
1809 }
1810
1811
1812
1813
1814
1815
1816 if (!ieee80211_hw_check(&sta->local->hw, AP_LINK_PS) &&
1817 !ieee80211_has_morefrags(hdr->frame_control) &&
1818 !is_multicast_ether_addr(hdr->addr1) &&
1819 (ieee80211_is_mgmt(hdr->frame_control) ||
1820 ieee80211_is_data(hdr->frame_control)) &&
1821 !(status->rx_flags & IEEE80211_RX_DEFERRED_RELEASE) &&
1822 (rx->sdata->vif.type == NL80211_IFTYPE_AP ||
1823 rx->sdata->vif.type == NL80211_IFTYPE_AP_VLAN)) {
1824 if (test_sta_flag(sta, WLAN_STA_PS_STA)) {
1825 if (!ieee80211_has_pm(hdr->frame_control))
1826 sta_ps_end(sta);
1827 } else {
1828 if (ieee80211_has_pm(hdr->frame_control))
1829 sta_ps_start(sta);
1830 }
1831 }
1832
1833
1834 if (ieee80211_vif_is_mesh(&rx->sdata->vif))
1835 ieee80211_mps_rx_h_sta_process(sta, hdr);
1836
1837
1838
1839
1840
1841 if (ieee80211_is_nullfunc(hdr->frame_control) ||
1842 ieee80211_is_qos_nullfunc(hdr->frame_control)) {
1843 I802_DEBUG_INC(rx->local->rx_handlers_drop_nullfunc);
1844
1845
1846
1847
1848
1849
1850
1851 if (ieee80211_has_a4(hdr->frame_control) &&
1852 (rx->sdata->vif.type == NL80211_IFTYPE_AP ||
1853 (rx->sdata->vif.type == NL80211_IFTYPE_AP_VLAN &&
1854 !rx->sdata->u.vlan.sta))) {
1855 if (!test_and_set_sta_flag(sta, WLAN_STA_4ADDR_EVENT))
1856 cfg80211_rx_unexpected_4addr_frame(
1857 rx->sdata->dev, sta->sta.addr,
1858 GFP_ATOMIC);
1859 return RX_DROP_MONITOR;
1860 }
1861
1862
1863
1864
1865 sta->rx_stats.packets++;
1866 dev_kfree_skb(rx->skb);
1867 return RX_QUEUED;
1868 }
1869
1870 return RX_CONTINUE;
1871}
1872
1873static ieee80211_rx_result debug_noinline
1874ieee80211_rx_h_decrypt(struct ieee80211_rx_data *rx)
1875{
1876 struct sk_buff *skb = rx->skb;
1877 struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(skb);
1878 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
1879 int keyidx;
1880 ieee80211_rx_result result = RX_DROP_UNUSABLE;
1881 struct ieee80211_key *sta_ptk = NULL;
1882 struct ieee80211_key *ptk_idx = NULL;
1883 int mmie_keyidx = -1;
1884 __le16 fc;
1885 const struct ieee80211_cipher_scheme *cs = NULL;
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915 rx->key = NULL;
1916 fc = hdr->frame_control;
1917
1918 if (rx->sta) {
1919 int keyid = rx->sta->ptk_idx;
1920 sta_ptk = rcu_dereference(rx->sta->ptk[keyid]);
1921
1922 if (ieee80211_has_protected(fc)) {
1923 cs = rx->sta->cipher_scheme;
1924 keyid = ieee80211_get_keyid(rx->skb, cs);
1925
1926 if (unlikely(keyid < 0))
1927 return RX_DROP_UNUSABLE;
1928
1929 ptk_idx = rcu_dereference(rx->sta->ptk[keyid]);
1930 }
1931 }
1932
1933 if (!ieee80211_has_protected(fc))
1934 mmie_keyidx = ieee80211_get_mmie_keyidx(rx->skb);
1935
1936 if (!is_multicast_ether_addr(hdr->addr1) && sta_ptk) {
1937 rx->key = ptk_idx ? ptk_idx : sta_ptk;
1938 if ((status->flag & RX_FLAG_DECRYPTED) &&
1939 (status->flag & RX_FLAG_IV_STRIPPED))
1940 return RX_CONTINUE;
1941
1942 if (!ieee80211_has_protected(fc))
1943 return RX_CONTINUE;
1944 } else if (mmie_keyidx >= 0) {
1945
1946 if ((status->flag & RX_FLAG_DECRYPTED) &&
1947 (status->flag & RX_FLAG_IV_STRIPPED))
1948 return RX_CONTINUE;
1949
1950 if (mmie_keyidx < NUM_DEFAULT_KEYS ||
1951 mmie_keyidx >= NUM_DEFAULT_KEYS + NUM_DEFAULT_MGMT_KEYS)
1952 return RX_DROP_MONITOR;
1953 if (rx->sta) {
1954 if (ieee80211_is_group_privacy_action(skb) &&
1955 test_sta_flag(rx->sta, WLAN_STA_MFP))
1956 return RX_DROP_MONITOR;
1957
1958 rx->key = rcu_dereference(rx->sta->gtk[mmie_keyidx]);
1959 }
1960 if (!rx->key)
1961 rx->key = rcu_dereference(rx->sdata->keys[mmie_keyidx]);
1962 } else if (!ieee80211_has_protected(fc)) {
1963
1964
1965
1966
1967
1968
1969 struct ieee80211_key *key = NULL;
1970 struct ieee80211_sub_if_data *sdata = rx->sdata;
1971 int i;
1972
1973 if (ieee80211_is_mgmt(fc) &&
1974 is_multicast_ether_addr(hdr->addr1) &&
1975 (key = rcu_dereference(rx->sdata->default_mgmt_key)))
1976 rx->key = key;
1977 else {
1978 if (rx->sta) {
1979 for (i = 0; i < NUM_DEFAULT_KEYS; i++) {
1980 key = rcu_dereference(rx->sta->gtk[i]);
1981 if (key)
1982 break;
1983 }
1984 }
1985 if (!key) {
1986 for (i = 0; i < NUM_DEFAULT_KEYS; i++) {
1987 key = rcu_dereference(sdata->keys[i]);
1988 if (key)
1989 break;
1990 }
1991 }
1992 if (key)
1993 rx->key = key;
1994 }
1995 return RX_CONTINUE;
1996 } else {
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006 if ((status->flag & RX_FLAG_DECRYPTED) &&
2007 (status->flag & RX_FLAG_IV_STRIPPED))
2008 return RX_CONTINUE;
2009
2010 keyidx = ieee80211_get_keyid(rx->skb, cs);
2011
2012 if (unlikely(keyidx < 0))
2013 return RX_DROP_UNUSABLE;
2014
2015
2016 if (is_multicast_ether_addr(hdr->addr1) && rx->sta)
2017 rx->key = rcu_dereference(rx->sta->gtk[keyidx]);
2018
2019
2020 if (!rx->key) {
2021 rx->key = rcu_dereference(rx->sdata->keys[keyidx]);
2022
2023
2024
2025
2026
2027
2028 if (rx->key &&
2029 rx->key->conf.cipher != WLAN_CIPHER_SUITE_WEP40 &&
2030 rx->key->conf.cipher != WLAN_CIPHER_SUITE_WEP104 &&
2031 !is_multicast_ether_addr(hdr->addr1))
2032 rx->key = NULL;
2033 }
2034 }
2035
2036 if (rx->key) {
2037 if (unlikely(rx->key->flags & KEY_FLAG_TAINTED))
2038 return RX_DROP_MONITOR;
2039
2040
2041 } else {
2042 return RX_DROP_MONITOR;
2043 }
2044
2045 switch (rx->key->conf.cipher) {
2046 case WLAN_CIPHER_SUITE_WEP40:
2047 case WLAN_CIPHER_SUITE_WEP104:
2048 result = ieee80211_crypto_wep_decrypt(rx);
2049 break;
2050 case WLAN_CIPHER_SUITE_TKIP:
2051 result = ieee80211_crypto_tkip_decrypt(rx);
2052 break;
2053 case WLAN_CIPHER_SUITE_CCMP:
2054 result = ieee80211_crypto_ccmp_decrypt(
2055 rx, IEEE80211_CCMP_MIC_LEN);
2056 break;
2057 case WLAN_CIPHER_SUITE_CCMP_256:
2058 result = ieee80211_crypto_ccmp_decrypt(
2059 rx, IEEE80211_CCMP_256_MIC_LEN);
2060 break;
2061 case WLAN_CIPHER_SUITE_AES_CMAC:
2062 result = ieee80211_crypto_aes_cmac_decrypt(rx);
2063 break;
2064 case WLAN_CIPHER_SUITE_BIP_CMAC_256:
2065 result = ieee80211_crypto_aes_cmac_256_decrypt(rx);
2066 break;
2067 case WLAN_CIPHER_SUITE_BIP_GMAC_128:
2068 case WLAN_CIPHER_SUITE_BIP_GMAC_256:
2069 result = ieee80211_crypto_aes_gmac_decrypt(rx);
2070 break;
2071 case WLAN_CIPHER_SUITE_GCMP:
2072 case WLAN_CIPHER_SUITE_GCMP_256:
2073 result = ieee80211_crypto_gcmp_decrypt(rx);
2074 break;
2075 default:
2076 result = ieee80211_crypto_hw_decrypt(rx);
2077 }
2078
2079
2080
2081
2082 status->flag |= RX_FLAG_DECRYPTED;
2083
2084 return result;
2085}
2086
2087static inline struct ieee80211_fragment_entry *
2088ieee80211_reassemble_add(struct ieee80211_sub_if_data *sdata,
2089 unsigned int frag, unsigned int seq, int rx_queue,
2090 struct sk_buff **skb)
2091{
2092 struct ieee80211_fragment_entry *entry;
2093
2094 entry = &sdata->fragments[sdata->fragment_next++];
2095 if (sdata->fragment_next >= IEEE80211_FRAGMENT_MAX)
2096 sdata->fragment_next = 0;
2097
2098 if (!skb_queue_empty(&entry->skb_list))
2099 __skb_queue_purge(&entry->skb_list);
2100
2101 __skb_queue_tail(&entry->skb_list, *skb);
2102 *skb = NULL;
2103 entry->first_frag_time = jiffies;
2104 entry->seq = seq;
2105 entry->rx_queue = rx_queue;
2106 entry->last_frag = frag;
2107 entry->check_sequential_pn = false;
2108 entry->extra_len = 0;
2109
2110 return entry;
2111}
2112
2113static inline struct ieee80211_fragment_entry *
2114ieee80211_reassemble_find(struct ieee80211_sub_if_data *sdata,
2115 unsigned int frag, unsigned int seq,
2116 int rx_queue, struct ieee80211_hdr *hdr)
2117{
2118 struct ieee80211_fragment_entry *entry;
2119 int i, idx;
2120
2121 idx = sdata->fragment_next;
2122 for (i = 0; i < IEEE80211_FRAGMENT_MAX; i++) {
2123 struct ieee80211_hdr *f_hdr;
2124 struct sk_buff *f_skb;
2125
2126 idx--;
2127 if (idx < 0)
2128 idx = IEEE80211_FRAGMENT_MAX - 1;
2129
2130 entry = &sdata->fragments[idx];
2131 if (skb_queue_empty(&entry->skb_list) || entry->seq != seq ||
2132 entry->rx_queue != rx_queue ||
2133 entry->last_frag + 1 != frag)
2134 continue;
2135
2136 f_skb = __skb_peek(&entry->skb_list);
2137 f_hdr = (struct ieee80211_hdr *) f_skb->data;
2138
2139
2140
2141
2142 if (((hdr->frame_control ^ f_hdr->frame_control) &
2143 cpu_to_le16(IEEE80211_FCTL_FTYPE)) ||
2144 !ether_addr_equal(hdr->addr1, f_hdr->addr1) ||
2145 !ether_addr_equal(hdr->addr2, f_hdr->addr2))
2146 continue;
2147
2148 if (time_after(jiffies, entry->first_frag_time + 2 * HZ)) {
2149 __skb_queue_purge(&entry->skb_list);
2150 continue;
2151 }
2152 return entry;
2153 }
2154
2155 return NULL;
2156}
2157
2158static ieee80211_rx_result debug_noinline
2159ieee80211_rx_h_defragment(struct ieee80211_rx_data *rx)
2160{
2161 struct ieee80211_hdr *hdr;
2162 u16 sc;
2163 __le16 fc;
2164 unsigned int frag, seq;
2165 struct ieee80211_fragment_entry *entry;
2166 struct sk_buff *skb;
2167
2168 hdr = (struct ieee80211_hdr *)rx->skb->data;
2169 fc = hdr->frame_control;
2170
2171 if (ieee80211_is_ctl(fc))
2172 return RX_CONTINUE;
2173
2174 sc = le16_to_cpu(hdr->seq_ctrl);
2175 frag = sc & IEEE80211_SCTL_FRAG;
2176
2177 if (is_multicast_ether_addr(hdr->addr1)) {
2178 I802_DEBUG_INC(rx->local->dot11MulticastReceivedFrameCount);
2179 goto out_no_led;
2180 }
2181
2182 if (likely(!ieee80211_has_morefrags(fc) && frag == 0))
2183 goto out;
2184
2185 I802_DEBUG_INC(rx->local->rx_handlers_fragments);
2186
2187 if (skb_linearize(rx->skb))
2188 return RX_DROP_UNUSABLE;
2189
2190
2191
2192
2193
2194
2195 hdr = (struct ieee80211_hdr *)rx->skb->data;
2196 seq = (sc & IEEE80211_SCTL_SEQ) >> 4;
2197
2198 if (frag == 0) {
2199
2200 entry = ieee80211_reassemble_add(rx->sdata, frag, seq,
2201 rx->seqno_idx, &(rx->skb));
2202 if (rx->key &&
2203 (rx->key->conf.cipher == WLAN_CIPHER_SUITE_CCMP ||
2204 rx->key->conf.cipher == WLAN_CIPHER_SUITE_CCMP_256 ||
2205 rx->key->conf.cipher == WLAN_CIPHER_SUITE_GCMP ||
2206 rx->key->conf.cipher == WLAN_CIPHER_SUITE_GCMP_256) &&
2207 ieee80211_has_protected(fc)) {
2208 int queue = rx->security_idx;
2209
2210
2211
2212
2213 entry->check_sequential_pn = true;
2214 memcpy(entry->last_pn,
2215 rx->key->u.ccmp.rx_pn[queue],
2216 IEEE80211_CCMP_PN_LEN);
2217 BUILD_BUG_ON(offsetof(struct ieee80211_key,
2218 u.ccmp.rx_pn) !=
2219 offsetof(struct ieee80211_key,
2220 u.gcmp.rx_pn));
2221 BUILD_BUG_ON(sizeof(rx->key->u.ccmp.rx_pn[queue]) !=
2222 sizeof(rx->key->u.gcmp.rx_pn[queue]));
2223 BUILD_BUG_ON(IEEE80211_CCMP_PN_LEN !=
2224 IEEE80211_GCMP_PN_LEN);
2225 }
2226 return RX_QUEUED;
2227 }
2228
2229
2230
2231
2232 entry = ieee80211_reassemble_find(rx->sdata, frag, seq,
2233 rx->seqno_idx, hdr);
2234 if (!entry) {
2235 I802_DEBUG_INC(rx->local->rx_handlers_drop_defrag);
2236 return RX_DROP_MONITOR;
2237 }
2238
2239
2240
2241
2242
2243
2244 if (entry->check_sequential_pn) {
2245 int i;
2246 u8 pn[IEEE80211_CCMP_PN_LEN], *rpn;
2247 int queue;
2248
2249 if (!rx->key ||
2250 (rx->key->conf.cipher != WLAN_CIPHER_SUITE_CCMP &&
2251 rx->key->conf.cipher != WLAN_CIPHER_SUITE_CCMP_256 &&
2252 rx->key->conf.cipher != WLAN_CIPHER_SUITE_GCMP &&
2253 rx->key->conf.cipher != WLAN_CIPHER_SUITE_GCMP_256))
2254 return RX_DROP_UNUSABLE;
2255 memcpy(pn, entry->last_pn, IEEE80211_CCMP_PN_LEN);
2256 for (i = IEEE80211_CCMP_PN_LEN - 1; i >= 0; i--) {
2257 pn[i]++;
2258 if (pn[i])
2259 break;
2260 }
2261 queue = rx->security_idx;
2262 rpn = rx->key->u.ccmp.rx_pn[queue];
2263 if (memcmp(pn, rpn, IEEE80211_CCMP_PN_LEN))
2264 return RX_DROP_UNUSABLE;
2265 memcpy(entry->last_pn, pn, IEEE80211_CCMP_PN_LEN);
2266 }
2267
2268 skb_pull(rx->skb, ieee80211_hdrlen(fc));
2269 __skb_queue_tail(&entry->skb_list, rx->skb);
2270 entry->last_frag = frag;
2271 entry->extra_len += rx->skb->len;
2272 if (ieee80211_has_morefrags(fc)) {
2273 rx->skb = NULL;
2274 return RX_QUEUED;
2275 }
2276
2277 rx->skb = __skb_dequeue(&entry->skb_list);
2278 if (skb_tailroom(rx->skb) < entry->extra_len) {
2279 I802_DEBUG_INC(rx->local->rx_expand_skb_head_defrag);
2280 if (unlikely(pskb_expand_head(rx->skb, 0, entry->extra_len,
2281 GFP_ATOMIC))) {
2282 I802_DEBUG_INC(rx->local->rx_handlers_drop_defrag);
2283 __skb_queue_purge(&entry->skb_list);
2284 return RX_DROP_UNUSABLE;
2285 }
2286 }
2287 while ((skb = __skb_dequeue(&entry->skb_list))) {
2288 skb_put_data(rx->skb, skb->data, skb->len);
2289 dev_kfree_skb(skb);
2290 }
2291
2292 out:
2293 ieee80211_led_rx(rx->local);
2294 out_no_led:
2295 if (rx->sta)
2296 rx->sta->rx_stats.packets++;
2297 return RX_CONTINUE;
2298}
2299
2300static int ieee80211_802_1x_port_control(struct ieee80211_rx_data *rx)
2301{
2302 if (unlikely(!rx->sta || !test_sta_flag(rx->sta, WLAN_STA_AUTHORIZED)))
2303 return -EACCES;
2304
2305 return 0;
2306}
2307
2308static int ieee80211_drop_unencrypted(struct ieee80211_rx_data *rx, __le16 fc)
2309{
2310 struct sk_buff *skb = rx->skb;
2311 struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(skb);
2312
2313
2314
2315
2316
2317 if (status->flag & RX_FLAG_DECRYPTED)
2318 return 0;
2319
2320
2321 if (unlikely(!ieee80211_has_protected(fc) &&
2322 !ieee80211_is_nullfunc(fc) &&
2323 ieee80211_is_data(fc) && rx->key))
2324 return -EACCES;
2325
2326 return 0;
2327}
2328
2329static int ieee80211_drop_unencrypted_mgmt(struct ieee80211_rx_data *rx)
2330{
2331 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)rx->skb->data;
2332 struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(rx->skb);
2333 __le16 fc = hdr->frame_control;
2334
2335
2336
2337
2338
2339 if (status->flag & RX_FLAG_DECRYPTED)
2340 return 0;
2341
2342 if (rx->sta && test_sta_flag(rx->sta, WLAN_STA_MFP)) {
2343 if (unlikely(!ieee80211_has_protected(fc) &&
2344 ieee80211_is_unicast_robust_mgmt_frame(rx->skb) &&
2345 rx->key)) {
2346 if (ieee80211_is_deauth(fc) ||
2347 ieee80211_is_disassoc(fc))
2348 cfg80211_rx_unprot_mlme_mgmt(rx->sdata->dev,
2349 rx->skb->data,
2350 rx->skb->len);
2351 return -EACCES;
2352 }
2353
2354 if (unlikely(ieee80211_is_multicast_robust_mgmt_frame(rx->skb) &&
2355 ieee80211_get_mmie_keyidx(rx->skb) < 0)) {
2356 if (ieee80211_is_deauth(fc) ||
2357 ieee80211_is_disassoc(fc))
2358 cfg80211_rx_unprot_mlme_mgmt(rx->sdata->dev,
2359 rx->skb->data,
2360 rx->skb->len);
2361 return -EACCES;
2362 }
2363
2364
2365
2366
2367 if (unlikely(ieee80211_is_action(fc) && !rx->key &&
2368 ieee80211_is_robust_mgmt_frame(rx->skb)))
2369 return -EACCES;
2370 }
2371
2372 return 0;
2373}
2374
2375static int
2376__ieee80211_data_to_8023(struct ieee80211_rx_data *rx, bool *port_control)
2377{
2378 struct ieee80211_sub_if_data *sdata = rx->sdata;
2379 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)rx->skb->data;
2380 bool check_port_control = false;
2381 struct ethhdr *ehdr;
2382 int ret;
2383
2384 *port_control = false;
2385 if (ieee80211_has_a4(hdr->frame_control) &&
2386 sdata->vif.type == NL80211_IFTYPE_AP_VLAN && !sdata->u.vlan.sta)
2387 return -1;
2388
2389 if (sdata->vif.type == NL80211_IFTYPE_STATION &&
2390 !!sdata->u.mgd.use_4addr != !!ieee80211_has_a4(hdr->frame_control)) {
2391
2392 if (!sdata->u.mgd.use_4addr)
2393 return -1;
2394 else if (!ether_addr_equal(hdr->addr1, sdata->vif.addr))
2395 check_port_control = true;
2396 }
2397
2398 if (is_multicast_ether_addr(hdr->addr1) &&
2399 sdata->vif.type == NL80211_IFTYPE_AP_VLAN && sdata->u.vlan.sta)
2400 return -1;
2401
2402 ret = ieee80211_data_to_8023(rx->skb, sdata->vif.addr, sdata->vif.type);
2403 if (ret < 0)
2404 return ret;
2405
2406 ehdr = (struct ethhdr *) rx->skb->data;
2407 if (ehdr->h_proto == rx->sdata->control_port_protocol)
2408 *port_control = true;
2409 else if (check_port_control)
2410 return -1;
2411
2412 return 0;
2413}
2414
2415
2416
2417
2418static bool ieee80211_frame_allowed(struct ieee80211_rx_data *rx, __le16 fc)
2419{
2420 static const u8 pae_group_addr[ETH_ALEN] __aligned(2)
2421 = { 0x01, 0x80, 0xC2, 0x00, 0x00, 0x03 };
2422 struct ethhdr *ehdr = (struct ethhdr *) rx->skb->data;
2423
2424
2425
2426
2427
2428 if (ehdr->h_proto == rx->sdata->control_port_protocol &&
2429 (ether_addr_equal(ehdr->h_dest, rx->sdata->vif.addr) ||
2430 ether_addr_equal(ehdr->h_dest, pae_group_addr)))
2431 return true;
2432
2433 if (ieee80211_802_1x_port_control(rx) ||
2434 ieee80211_drop_unencrypted(rx, fc))
2435 return false;
2436
2437 return true;
2438}
2439
2440static void ieee80211_deliver_skb_to_local_stack(struct sk_buff *skb,
2441 struct ieee80211_rx_data *rx)
2442{
2443 struct ieee80211_sub_if_data *sdata = rx->sdata;
2444 struct net_device *dev = sdata->dev;
2445
2446 if (unlikely((skb->protocol == sdata->control_port_protocol ||
2447 skb->protocol == cpu_to_be16(ETH_P_PREAUTH)) &&
2448 sdata->control_port_over_nl80211)) {
2449 struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(skb);
2450 bool noencrypt = !(status->flag & RX_FLAG_DECRYPTED);
2451
2452 cfg80211_rx_control_port(dev, skb, noencrypt);
2453 dev_kfree_skb(skb);
2454 } else {
2455 memset(skb->cb, 0, sizeof(skb->cb));
2456
2457
2458 if (rx->napi)
2459 napi_gro_receive(rx->napi, skb);
2460 else
2461 netif_receive_skb(skb);
2462 }
2463}
2464
2465
2466
2467
2468static void
2469ieee80211_deliver_skb(struct ieee80211_rx_data *rx)
2470{
2471 struct ieee80211_sub_if_data *sdata = rx->sdata;
2472 struct net_device *dev = sdata->dev;
2473 struct sk_buff *skb, *xmit_skb;
2474 struct ethhdr *ehdr = (struct ethhdr *) rx->skb->data;
2475 struct sta_info *dsta;
2476
2477 skb = rx->skb;
2478 xmit_skb = NULL;
2479
2480 ieee80211_rx_stats(dev, skb->len);
2481
2482 if (rx->sta) {
2483
2484
2485
2486
2487
2488 u64_stats_update_begin(&rx->sta->rx_stats.syncp);
2489 rx->sta->rx_stats.msdu[rx->seqno_idx]++;
2490 u64_stats_update_end(&rx->sta->rx_stats.syncp);
2491 }
2492
2493 if ((sdata->vif.type == NL80211_IFTYPE_AP ||
2494 sdata->vif.type == NL80211_IFTYPE_AP_VLAN) &&
2495 !(sdata->flags & IEEE80211_SDATA_DONT_BRIDGE_PACKETS) &&
2496 (sdata->vif.type != NL80211_IFTYPE_AP_VLAN || !sdata->u.vlan.sta)) {
2497 if (is_multicast_ether_addr(ehdr->h_dest) &&
2498 ieee80211_vif_get_num_mcast_if(sdata) != 0) {
2499
2500
2501
2502
2503 xmit_skb = skb_copy(skb, GFP_ATOMIC);
2504 if (!xmit_skb)
2505 net_info_ratelimited("%s: failed to clone multicast frame\n",
2506 dev->name);
2507 } else if (!is_multicast_ether_addr(ehdr->h_dest) &&
2508 !ether_addr_equal(ehdr->h_dest, ehdr->h_source)) {
2509 dsta = sta_info_get(sdata, ehdr->h_dest);
2510 if (dsta) {
2511
2512
2513
2514
2515
2516
2517 xmit_skb = skb;
2518 skb = NULL;
2519 }
2520 }
2521 }
2522
2523#ifndef CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS
2524 if (skb) {
2525
2526
2527
2528
2529
2530
2531 int align;
2532
2533 align = (unsigned long)(skb->data + sizeof(struct ethhdr)) & 3;
2534 if (align) {
2535 if (WARN_ON(skb_headroom(skb) < 3)) {
2536 dev_kfree_skb(skb);
2537 skb = NULL;
2538 } else {
2539 u8 *data = skb->data;
2540 size_t len = skb_headlen(skb);
2541 skb->data -= align;
2542 memmove(skb->data, data, len);
2543 skb_set_tail_pointer(skb, len);
2544 }
2545 }
2546 }
2547#endif
2548
2549 if (skb) {
2550 skb->protocol = eth_type_trans(skb, dev);
2551 ieee80211_deliver_skb_to_local_stack(skb, rx);
2552 }
2553
2554 if (xmit_skb) {
2555
2556
2557
2558
2559
2560 xmit_skb->priority += 256;
2561 xmit_skb->protocol = htons(ETH_P_802_3);
2562 skb_reset_network_header(xmit_skb);
2563 skb_reset_mac_header(xmit_skb);
2564 dev_queue_xmit(xmit_skb);
2565 }
2566}
2567
2568static ieee80211_rx_result debug_noinline
2569__ieee80211_rx_h_amsdu(struct ieee80211_rx_data *rx, u8 data_offset)
2570{
2571 struct net_device *dev = rx->sdata->dev;
2572 struct sk_buff *skb = rx->skb;
2573 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
2574 __le16 fc = hdr->frame_control;
2575 struct sk_buff_head frame_list;
2576 struct ethhdr ethhdr;
2577 const u8 *check_da = ethhdr.h_dest, *check_sa = ethhdr.h_source;
2578
2579 if (unlikely(ieee80211_has_a4(hdr->frame_control))) {
2580 check_da = NULL;
2581 check_sa = NULL;
2582 } else switch (rx->sdata->vif.type) {
2583 case NL80211_IFTYPE_AP:
2584 case NL80211_IFTYPE_AP_VLAN:
2585 check_da = NULL;
2586 break;
2587 case NL80211_IFTYPE_STATION:
2588 if (!rx->sta ||
2589 !test_sta_flag(rx->sta, WLAN_STA_TDLS_PEER))
2590 check_sa = NULL;
2591 break;
2592 case NL80211_IFTYPE_MESH_POINT:
2593 check_sa = NULL;
2594 break;
2595 default:
2596 break;
2597 }
2598
2599 skb->dev = dev;
2600 __skb_queue_head_init(&frame_list);
2601
2602 if (ieee80211_data_to_8023_exthdr(skb, ðhdr,
2603 rx->sdata->vif.addr,
2604 rx->sdata->vif.type,
2605 data_offset))
2606 return RX_DROP_UNUSABLE;
2607
2608 ieee80211_amsdu_to_8023s(skb, &frame_list, dev->dev_addr,
2609 rx->sdata->vif.type,
2610 rx->local->hw.extra_tx_headroom,
2611 check_da, check_sa);
2612
2613 while (!skb_queue_empty(&frame_list)) {
2614 rx->skb = __skb_dequeue(&frame_list);
2615
2616 if (!ieee80211_frame_allowed(rx, fc)) {
2617 dev_kfree_skb(rx->skb);
2618 continue;
2619 }
2620
2621 ieee80211_deliver_skb(rx);
2622 }
2623
2624 return RX_QUEUED;
2625}
2626
2627static ieee80211_rx_result debug_noinline
2628ieee80211_rx_h_amsdu(struct ieee80211_rx_data *rx)
2629{
2630 struct sk_buff *skb = rx->skb;
2631 struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(skb);
2632 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
2633 __le16 fc = hdr->frame_control;
2634
2635 if (!(status->rx_flags & IEEE80211_RX_AMSDU))
2636 return RX_CONTINUE;
2637
2638 if (unlikely(!ieee80211_is_data(fc)))
2639 return RX_CONTINUE;
2640
2641 if (unlikely(!ieee80211_is_data_present(fc)))
2642 return RX_DROP_MONITOR;
2643
2644 if (unlikely(ieee80211_has_a4(hdr->frame_control))) {
2645 switch (rx->sdata->vif.type) {
2646 case NL80211_IFTYPE_AP_VLAN:
2647 if (!rx->sdata->u.vlan.sta)
2648 return RX_DROP_UNUSABLE;
2649 break;
2650 case NL80211_IFTYPE_STATION:
2651 if (!rx->sdata->u.mgd.use_4addr)
2652 return RX_DROP_UNUSABLE;
2653 break;
2654 default:
2655 return RX_DROP_UNUSABLE;
2656 }
2657 }
2658
2659 if (is_multicast_ether_addr(hdr->addr1))
2660 return RX_DROP_UNUSABLE;
2661
2662 return __ieee80211_rx_h_amsdu(rx, 0);
2663}
2664
2665#ifdef CONFIG_MAC80211_MESH
2666static ieee80211_rx_result
2667ieee80211_rx_h_mesh_fwding(struct ieee80211_rx_data *rx)
2668{
2669 struct ieee80211_hdr *fwd_hdr, *hdr;
2670 struct ieee80211_tx_info *info;
2671 struct ieee80211s_hdr *mesh_hdr;
2672 struct sk_buff *skb = rx->skb, *fwd_skb;
2673 struct ieee80211_local *local = rx->local;
2674 struct ieee80211_sub_if_data *sdata = rx->sdata;
2675 struct ieee80211_if_mesh *ifmsh = &sdata->u.mesh;
2676 u16 ac, q, hdrlen;
2677 int tailroom = 0;
2678
2679 hdr = (struct ieee80211_hdr *) skb->data;
2680 hdrlen = ieee80211_hdrlen(hdr->frame_control);
2681
2682
2683 if (!pskb_may_pull(rx->skb, hdrlen + 6))
2684 return RX_DROP_MONITOR;
2685
2686 mesh_hdr = (struct ieee80211s_hdr *) (skb->data + hdrlen);
2687
2688
2689 if (!pskb_may_pull(rx->skb,
2690 hdrlen + ieee80211_get_mesh_hdrlen(mesh_hdr)))
2691 return RX_DROP_MONITOR;
2692
2693
2694 hdr = (struct ieee80211_hdr *) skb->data;
2695 mesh_hdr = (struct ieee80211s_hdr *) (skb->data + hdrlen);
2696
2697 if (ieee80211_drop_unencrypted(rx, hdr->frame_control))
2698 return RX_DROP_MONITOR;
2699
2700
2701 if (ieee80211_is_data(hdr->frame_control) &&
2702 is_multicast_ether_addr(hdr->addr1) &&
2703 mesh_rmc_check(rx->sdata, hdr->addr3, mesh_hdr))
2704 return RX_DROP_MONITOR;
2705
2706 if (!ieee80211_is_data(hdr->frame_control))
2707 return RX_CONTINUE;
2708
2709 if (!mesh_hdr->ttl)
2710 return RX_DROP_MONITOR;
2711
2712 if (mesh_hdr->flags & MESH_FLAGS_AE) {
2713 struct mesh_path *mppath;
2714 char *proxied_addr;
2715 char *mpp_addr;
2716
2717 if (is_multicast_ether_addr(hdr->addr1)) {
2718 mpp_addr = hdr->addr3;
2719 proxied_addr = mesh_hdr->eaddr1;
2720 } else if ((mesh_hdr->flags & MESH_FLAGS_AE) ==
2721 MESH_FLAGS_AE_A5_A6) {
2722
2723 mpp_addr = hdr->addr4;
2724 proxied_addr = mesh_hdr->eaddr2;
2725 } else {
2726 return RX_DROP_MONITOR;
2727 }
2728
2729 rcu_read_lock();
2730 mppath = mpp_path_lookup(sdata, proxied_addr);
2731 if (!mppath) {
2732 mpp_path_add(sdata, proxied_addr, mpp_addr);
2733 } else {
2734 spin_lock_bh(&mppath->state_lock);
2735 if (!ether_addr_equal(mppath->mpp, mpp_addr))
2736 memcpy(mppath->mpp, mpp_addr, ETH_ALEN);
2737 mppath->exp_time = jiffies;
2738 spin_unlock_bh(&mppath->state_lock);
2739 }
2740 rcu_read_unlock();
2741 }
2742
2743
2744 if (!is_multicast_ether_addr(hdr->addr1) &&
2745 ether_addr_equal(sdata->vif.addr, hdr->addr3))
2746 return RX_CONTINUE;
2747
2748 ac = ieee80211_select_queue_80211(sdata, skb, hdr);
2749 q = sdata->vif.hw_queue[ac];
2750 if (ieee80211_queue_stopped(&local->hw, q)) {
2751 IEEE80211_IFSTA_MESH_CTR_INC(ifmsh, dropped_frames_congestion);
2752 return RX_DROP_MONITOR;
2753 }
2754 skb_set_queue_mapping(skb, q);
2755
2756 if (!--mesh_hdr->ttl) {
2757 if (!is_multicast_ether_addr(hdr->addr1))
2758 IEEE80211_IFSTA_MESH_CTR_INC(ifmsh,
2759 dropped_frames_ttl);
2760 goto out;
2761 }
2762
2763 if (!ifmsh->mshcfg.dot11MeshForwarding)
2764 goto out;
2765
2766 if (sdata->crypto_tx_tailroom_needed_cnt)
2767 tailroom = IEEE80211_ENCRYPT_TAILROOM;
2768
2769 fwd_skb = skb_copy_expand(skb, local->tx_headroom +
2770 sdata->encrypt_headroom,
2771 tailroom, GFP_ATOMIC);
2772 if (!fwd_skb)
2773 goto out;
2774
2775 fwd_hdr = (struct ieee80211_hdr *) fwd_skb->data;
2776 fwd_hdr->frame_control &= ~cpu_to_le16(IEEE80211_FCTL_RETRY);
2777 info = IEEE80211_SKB_CB(fwd_skb);
2778 memset(info, 0, sizeof(*info));
2779 info->flags |= IEEE80211_TX_INTFL_NEED_TXPROCESSING;
2780 info->control.vif = &rx->sdata->vif;
2781 info->control.jiffies = jiffies;
2782 if (is_multicast_ether_addr(fwd_hdr->addr1)) {
2783 IEEE80211_IFSTA_MESH_CTR_INC(ifmsh, fwded_mcast);
2784 memcpy(fwd_hdr->addr2, sdata->vif.addr, ETH_ALEN);
2785
2786 ieee80211_mps_set_frame_flags(sdata, NULL, fwd_hdr);
2787 } else if (!mesh_nexthop_lookup(sdata, fwd_skb)) {
2788
2789 IEEE80211_IFSTA_MESH_CTR_INC(ifmsh, fwded_unicast);
2790 } else {
2791
2792 mesh_path_error_tx(sdata, ifmsh->mshcfg.element_ttl,
2793 fwd_hdr->addr3, 0,
2794 WLAN_REASON_MESH_PATH_NOFORWARD,
2795 fwd_hdr->addr2);
2796 IEEE80211_IFSTA_MESH_CTR_INC(ifmsh, dropped_frames_no_route);
2797 kfree_skb(fwd_skb);
2798 return RX_DROP_MONITOR;
2799 }
2800
2801 IEEE80211_IFSTA_MESH_CTR_INC(ifmsh, fwded_frames);
2802 ieee80211_add_pending_skb(local, fwd_skb);
2803 out:
2804 if (is_multicast_ether_addr(hdr->addr1))
2805 return RX_CONTINUE;
2806 return RX_DROP_MONITOR;
2807}
2808#endif
2809
2810static ieee80211_rx_result debug_noinline
2811ieee80211_rx_h_data(struct ieee80211_rx_data *rx)
2812{
2813 struct ieee80211_sub_if_data *sdata = rx->sdata;
2814 struct ieee80211_local *local = rx->local;
2815 struct net_device *dev = sdata->dev;
2816 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)rx->skb->data;
2817 __le16 fc = hdr->frame_control;
2818 bool port_control;
2819 int err;
2820
2821 if (unlikely(!ieee80211_is_data(hdr->frame_control)))
2822 return RX_CONTINUE;
2823
2824 if (unlikely(!ieee80211_is_data_present(hdr->frame_control)))
2825 return RX_DROP_MONITOR;
2826
2827
2828
2829
2830
2831 if (ieee80211_has_a4(hdr->frame_control) &&
2832 sdata->vif.type == NL80211_IFTYPE_AP) {
2833 if (rx->sta &&
2834 !test_and_set_sta_flag(rx->sta, WLAN_STA_4ADDR_EVENT))
2835 cfg80211_rx_unexpected_4addr_frame(
2836 rx->sdata->dev, rx->sta->sta.addr, GFP_ATOMIC);
2837 return RX_DROP_MONITOR;
2838 }
2839
2840 err = __ieee80211_data_to_8023(rx, &port_control);
2841 if (unlikely(err))
2842 return RX_DROP_UNUSABLE;
2843
2844 if (!ieee80211_frame_allowed(rx, fc))
2845 return RX_DROP_MONITOR;
2846
2847
2848 if (unlikely(((struct ethhdr *)rx->skb->data)->h_proto ==
2849 cpu_to_be16(ETH_P_TDLS))) {
2850 struct ieee80211_tdls_data *tf = (void *)rx->skb->data;
2851
2852 if (pskb_may_pull(rx->skb,
2853 offsetof(struct ieee80211_tdls_data, u)) &&
2854 tf->payload_type == WLAN_TDLS_SNAP_RFTYPE &&
2855 tf->category == WLAN_CATEGORY_TDLS &&
2856 (tf->action_code == WLAN_TDLS_CHANNEL_SWITCH_REQUEST ||
2857 tf->action_code == WLAN_TDLS_CHANNEL_SWITCH_RESPONSE)) {
2858 skb_queue_tail(&local->skb_queue_tdls_chsw, rx->skb);
2859 schedule_work(&local->tdls_chsw_work);
2860 if (rx->sta)
2861 rx->sta->rx_stats.packets++;
2862
2863 return RX_QUEUED;
2864 }
2865 }
2866
2867 if (rx->sdata->vif.type == NL80211_IFTYPE_AP_VLAN &&
2868 unlikely(port_control) && sdata->bss) {
2869 sdata = container_of(sdata->bss, struct ieee80211_sub_if_data,
2870 u.ap);
2871 dev = sdata->dev;
2872 rx->sdata = sdata;
2873 }
2874
2875 rx->skb->dev = dev;
2876
2877 if (!ieee80211_hw_check(&local->hw, SUPPORTS_DYNAMIC_PS) &&
2878 local->ps_sdata && local->hw.conf.dynamic_ps_timeout > 0 &&
2879 !is_multicast_ether_addr(
2880 ((struct ethhdr *)rx->skb->data)->h_dest) &&
2881 (!local->scanning &&
2882 !test_bit(SDATA_STATE_OFFCHANNEL, &sdata->state)))
2883 mod_timer(&local->dynamic_ps_timer, jiffies +
2884 msecs_to_jiffies(local->hw.conf.dynamic_ps_timeout));
2885
2886 ieee80211_deliver_skb(rx);
2887
2888 return RX_QUEUED;
2889}
2890
2891static ieee80211_rx_result debug_noinline
2892ieee80211_rx_h_ctrl(struct ieee80211_rx_data *rx, struct sk_buff_head *frames)
2893{
2894 struct sk_buff *skb = rx->skb;
2895 struct ieee80211_bar *bar = (struct ieee80211_bar *)skb->data;
2896 struct tid_ampdu_rx *tid_agg_rx;
2897 u16 start_seq_num;
2898 u16 tid;
2899
2900 if (likely(!ieee80211_is_ctl(bar->frame_control)))
2901 return RX_CONTINUE;
2902
2903 if (ieee80211_is_back_req(bar->frame_control)) {
2904 struct {
2905 __le16 control, start_seq_num;
2906 } __packed bar_data;
2907 struct ieee80211_event event = {
2908 .type = BAR_RX_EVENT,
2909 };
2910
2911 if (!rx->sta)
2912 return RX_DROP_MONITOR;
2913
2914 if (skb_copy_bits(skb, offsetof(struct ieee80211_bar, control),
2915 &bar_data, sizeof(bar_data)))
2916 return RX_DROP_MONITOR;
2917
2918 tid = le16_to_cpu(bar_data.control) >> 12;
2919
2920 if (!test_bit(tid, rx->sta->ampdu_mlme.agg_session_valid) &&
2921 !test_and_set_bit(tid, rx->sta->ampdu_mlme.unexpected_agg))
2922 ieee80211_send_delba(rx->sdata, rx->sta->sta.addr, tid,
2923 WLAN_BACK_RECIPIENT,
2924 WLAN_REASON_QSTA_REQUIRE_SETUP);
2925
2926 tid_agg_rx = rcu_dereference(rx->sta->ampdu_mlme.tid_rx[tid]);
2927 if (!tid_agg_rx)
2928 return RX_DROP_MONITOR;
2929
2930 start_seq_num = le16_to_cpu(bar_data.start_seq_num) >> 4;
2931 event.u.ba.tid = tid;
2932 event.u.ba.ssn = start_seq_num;
2933 event.u.ba.sta = &rx->sta->sta;
2934
2935
2936 if (tid_agg_rx->timeout)
2937 mod_timer(&tid_agg_rx->session_timer,
2938 TU_TO_EXP_TIME(tid_agg_rx->timeout));
2939
2940 spin_lock(&tid_agg_rx->reorder_lock);
2941
2942 ieee80211_release_reorder_frames(rx->sdata, tid_agg_rx,
2943 start_seq_num, frames);
2944 spin_unlock(&tid_agg_rx->reorder_lock);
2945
2946 drv_event_callback(rx->local, rx->sdata, &event);
2947
2948 kfree_skb(skb);
2949 return RX_QUEUED;
2950 }
2951
2952
2953
2954
2955
2956
2957 return RX_DROP_MONITOR;
2958}
2959
2960static void ieee80211_process_sa_query_req(struct ieee80211_sub_if_data *sdata,
2961 struct ieee80211_mgmt *mgmt,
2962 size_t len)
2963{
2964 struct ieee80211_local *local = sdata->local;
2965 struct sk_buff *skb;
2966 struct ieee80211_mgmt *resp;
2967
2968 if (!ether_addr_equal(mgmt->da, sdata->vif.addr)) {
2969
2970 return;
2971 }
2972
2973 if (!ether_addr_equal(mgmt->sa, sdata->u.mgd.bssid) ||
2974 !ether_addr_equal(mgmt->bssid, sdata->u.mgd.bssid)) {
2975
2976 return;
2977 }
2978
2979 if (len < 24 + 1 + sizeof(resp->u.action.u.sa_query)) {
2980
2981 return;
2982 }
2983
2984 skb = dev_alloc_skb(sizeof(*resp) + local->hw.extra_tx_headroom);
2985 if (skb == NULL)
2986 return;
2987
2988 skb_reserve(skb, local->hw.extra_tx_headroom);
2989 resp = skb_put_zero(skb, 24);
2990 memcpy(resp->da, mgmt->sa, ETH_ALEN);
2991 memcpy(resp->sa, sdata->vif.addr, ETH_ALEN);
2992 memcpy(resp->bssid, sdata->u.mgd.bssid, ETH_ALEN);
2993 resp->frame_control = cpu_to_le16(IEEE80211_FTYPE_MGMT |
2994 IEEE80211_STYPE_ACTION);
2995 skb_put(skb, 1 + sizeof(resp->u.action.u.sa_query));
2996 resp->u.action.category = WLAN_CATEGORY_SA_QUERY;
2997 resp->u.action.u.sa_query.action = WLAN_ACTION_SA_QUERY_RESPONSE;
2998 memcpy(resp->u.action.u.sa_query.trans_id,
2999 mgmt->u.action.u.sa_query.trans_id,
3000 WLAN_SA_QUERY_TR_ID_LEN);
3001
3002 ieee80211_tx_skb(sdata, skb);
3003}
3004
3005static ieee80211_rx_result debug_noinline
3006ieee80211_rx_h_mgmt_check(struct ieee80211_rx_data *rx)
3007{
3008 struct ieee80211_mgmt *mgmt = (struct ieee80211_mgmt *) rx->skb->data;
3009 struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(rx->skb);
3010
3011
3012
3013
3014
3015
3016 if (rx->skb->len < 24)
3017 return RX_DROP_MONITOR;
3018
3019 if (!ieee80211_is_mgmt(mgmt->frame_control))
3020 return RX_DROP_MONITOR;
3021
3022 if (rx->sdata->vif.type == NL80211_IFTYPE_AP &&
3023 ieee80211_is_beacon(mgmt->frame_control) &&
3024 !(rx->flags & IEEE80211_RX_BEACON_REPORTED)) {
3025 int sig = 0;
3026
3027 if (ieee80211_hw_check(&rx->local->hw, SIGNAL_DBM) &&
3028 !(status->flag & RX_FLAG_NO_SIGNAL_VAL))
3029 sig = status->signal;
3030
3031 cfg80211_report_obss_beacon(rx->local->hw.wiphy,
3032 rx->skb->data, rx->skb->len,
3033 status->freq, sig);
3034 rx->flags |= IEEE80211_RX_BEACON_REPORTED;
3035 }
3036
3037 if (ieee80211_drop_unencrypted_mgmt(rx))
3038 return RX_DROP_UNUSABLE;
3039
3040 return RX_CONTINUE;
3041}
3042
3043static ieee80211_rx_result debug_noinline
3044ieee80211_rx_h_action(struct ieee80211_rx_data *rx)
3045{
3046 struct ieee80211_local *local = rx->local;
3047 struct ieee80211_sub_if_data *sdata = rx->sdata;
3048 struct ieee80211_mgmt *mgmt = (struct ieee80211_mgmt *) rx->skb->data;
3049 struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(rx->skb);
3050 int len = rx->skb->len;
3051
3052 if (!ieee80211_is_action(mgmt->frame_control))
3053 return RX_CONTINUE;
3054
3055
3056 if (len < IEEE80211_MIN_ACTION_SIZE)
3057 return RX_DROP_UNUSABLE;
3058
3059 if (!rx->sta && mgmt->u.action.category != WLAN_CATEGORY_PUBLIC &&
3060 mgmt->u.action.category != WLAN_CATEGORY_SELF_PROTECTED &&
3061 mgmt->u.action.category != WLAN_CATEGORY_SPECTRUM_MGMT)
3062 return RX_DROP_UNUSABLE;
3063
3064 switch (mgmt->u.action.category) {
3065 case WLAN_CATEGORY_HT:
3066
3067 if (!rx->sta->sta.ht_cap.ht_supported)
3068 goto invalid;
3069
3070 if (sdata->vif.type != NL80211_IFTYPE_STATION &&
3071 sdata->vif.type != NL80211_IFTYPE_MESH_POINT &&
3072 sdata->vif.type != NL80211_IFTYPE_AP_VLAN &&
3073 sdata->vif.type != NL80211_IFTYPE_AP &&
3074 sdata->vif.type != NL80211_IFTYPE_ADHOC)
3075 break;
3076
3077
3078 if (len < IEEE80211_MIN_ACTION_SIZE + 2)
3079 goto invalid;
3080
3081 switch (mgmt->u.action.u.ht_smps.action) {
3082 case WLAN_HT_ACTION_SMPS: {
3083 struct ieee80211_supported_band *sband;
3084 enum ieee80211_smps_mode smps_mode;
3085 struct sta_opmode_info sta_opmode = {};
3086
3087
3088 switch (mgmt->u.action.u.ht_smps.smps_control) {
3089 case WLAN_HT_SMPS_CONTROL_DISABLED:
3090 smps_mode = IEEE80211_SMPS_OFF;
3091 break;
3092 case WLAN_HT_SMPS_CONTROL_STATIC:
3093 smps_mode = IEEE80211_SMPS_STATIC;
3094 break;
3095 case WLAN_HT_SMPS_CONTROL_DYNAMIC:
3096 smps_mode = IEEE80211_SMPS_DYNAMIC;
3097 break;
3098 default:
3099 goto invalid;
3100 }
3101
3102
3103 if (rx->sta->sta.smps_mode == smps_mode)
3104 goto handled;
3105 rx->sta->sta.smps_mode = smps_mode;
3106 sta_opmode.smps_mode =
3107 ieee80211_smps_mode_to_smps_mode(smps_mode);
3108 sta_opmode.changed = STA_OPMODE_SMPS_MODE_CHANGED;
3109
3110 sband = rx->local->hw.wiphy->bands[status->band];
3111
3112 rate_control_rate_update(local, sband, rx->sta,
3113 IEEE80211_RC_SMPS_CHANGED);
3114 cfg80211_sta_opmode_change_notify(sdata->dev,
3115 rx->sta->addr,
3116 &sta_opmode,
3117 GFP_ATOMIC);
3118 goto handled;
3119 }
3120 case WLAN_HT_ACTION_NOTIFY_CHANWIDTH: {
3121 struct ieee80211_supported_band *sband;
3122 u8 chanwidth = mgmt->u.action.u.ht_notify_cw.chanwidth;
3123 enum ieee80211_sta_rx_bandwidth max_bw, new_bw;
3124 struct sta_opmode_info sta_opmode = {};
3125
3126
3127 if (!(rx->sta->sta.ht_cap.cap &
3128 IEEE80211_HT_CAP_SUP_WIDTH_20_40))
3129 goto handled;
3130
3131 if (chanwidth == IEEE80211_HT_CHANWIDTH_20MHZ)
3132 max_bw = IEEE80211_STA_RX_BW_20;
3133 else
3134 max_bw = ieee80211_sta_cap_rx_bw(rx->sta);
3135
3136
3137 rx->sta->cur_max_bandwidth = max_bw;
3138 new_bw = ieee80211_sta_cur_vht_bw(rx->sta);
3139
3140 if (rx->sta->sta.bandwidth == new_bw)
3141 goto handled;
3142
3143 rx->sta->sta.bandwidth = new_bw;
3144 sband = rx->local->hw.wiphy->bands[status->band];
3145 sta_opmode.bw =
3146 ieee80211_sta_rx_bw_to_chan_width(rx->sta);
3147 sta_opmode.changed = STA_OPMODE_MAX_BW_CHANGED;
3148
3149 rate_control_rate_update(local, sband, rx->sta,
3150 IEEE80211_RC_BW_CHANGED);
3151 cfg80211_sta_opmode_change_notify(sdata->dev,
3152 rx->sta->addr,
3153 &sta_opmode,
3154 GFP_ATOMIC);
3155 goto handled;
3156 }
3157 default:
3158 goto invalid;
3159 }
3160
3161 break;
3162 case WLAN_CATEGORY_PUBLIC:
3163 if (len < IEEE80211_MIN_ACTION_SIZE + 1)
3164 goto invalid;
3165 if (sdata->vif.type != NL80211_IFTYPE_STATION)
3166 break;
3167 if (!rx->sta)
3168 break;
3169 if (!ether_addr_equal(mgmt->bssid, sdata->u.mgd.bssid))
3170 break;
3171 if (mgmt->u.action.u.ext_chan_switch.action_code !=
3172 WLAN_PUB_ACTION_EXT_CHANSW_ANN)
3173 break;
3174 if (len < offsetof(struct ieee80211_mgmt,
3175 u.action.u.ext_chan_switch.variable))
3176 goto invalid;
3177 goto queue;
3178 case WLAN_CATEGORY_VHT:
3179 if (sdata->vif.type != NL80211_IFTYPE_STATION &&
3180 sdata->vif.type != NL80211_IFTYPE_MESH_POINT &&
3181 sdata->vif.type != NL80211_IFTYPE_AP_VLAN &&
3182 sdata->vif.type != NL80211_IFTYPE_AP &&
3183 sdata->vif.type != NL80211_IFTYPE_ADHOC)
3184 break;
3185
3186
3187 if (len < IEEE80211_MIN_ACTION_SIZE + 1)
3188 goto invalid;
3189
3190 switch (mgmt->u.action.u.vht_opmode_notif.action_code) {
3191 case WLAN_VHT_ACTION_OPMODE_NOTIF: {
3192
3193 if (len < IEEE80211_MIN_ACTION_SIZE + 2)
3194 goto invalid;
3195 goto queue;
3196 }
3197 case WLAN_VHT_ACTION_GROUPID_MGMT: {
3198 if (len < IEEE80211_MIN_ACTION_SIZE + 25)
3199 goto invalid;
3200 goto queue;
3201 }
3202 default:
3203 break;
3204 }
3205 break;
3206 case WLAN_CATEGORY_BACK:
3207 if (sdata->vif.type != NL80211_IFTYPE_STATION &&
3208 sdata->vif.type != NL80211_IFTYPE_MESH_POINT &&
3209 sdata->vif.type != NL80211_IFTYPE_AP_VLAN &&
3210 sdata->vif.type != NL80211_IFTYPE_AP &&
3211 sdata->vif.type != NL80211_IFTYPE_ADHOC)
3212 break;
3213
3214
3215 if (len < IEEE80211_MIN_ACTION_SIZE + 1)
3216 break;
3217
3218 switch (mgmt->u.action.u.addba_req.action_code) {
3219 case WLAN_ACTION_ADDBA_REQ:
3220 if (len < (IEEE80211_MIN_ACTION_SIZE +
3221 sizeof(mgmt->u.action.u.addba_req)))
3222 goto invalid;
3223 break;
3224 case WLAN_ACTION_ADDBA_RESP:
3225 if (len < (IEEE80211_MIN_ACTION_SIZE +
3226 sizeof(mgmt->u.action.u.addba_resp)))
3227 goto invalid;
3228 break;
3229 case WLAN_ACTION_DELBA:
3230 if (len < (IEEE80211_MIN_ACTION_SIZE +
3231 sizeof(mgmt->u.action.u.delba)))
3232 goto invalid;
3233 break;
3234 default:
3235 goto invalid;
3236 }
3237
3238 goto queue;
3239 case WLAN_CATEGORY_SPECTRUM_MGMT:
3240
3241 if (len < IEEE80211_MIN_ACTION_SIZE + 1)
3242 break;
3243
3244 switch (mgmt->u.action.u.measurement.action_code) {
3245 case WLAN_ACTION_SPCT_MSR_REQ:
3246 if (status->band != NL80211_BAND_5GHZ)
3247 break;
3248
3249 if (len < (IEEE80211_MIN_ACTION_SIZE +
3250 sizeof(mgmt->u.action.u.measurement)))
3251 break;
3252
3253 if (sdata->vif.type != NL80211_IFTYPE_STATION)
3254 break;
3255
3256 ieee80211_process_measurement_req(sdata, mgmt, len);
3257 goto handled;
3258 case WLAN_ACTION_SPCT_CHL_SWITCH: {
3259 u8 *bssid;
3260 if (len < (IEEE80211_MIN_ACTION_SIZE +
3261 sizeof(mgmt->u.action.u.chan_switch)))
3262 break;
3263
3264 if (sdata->vif.type != NL80211_IFTYPE_STATION &&
3265 sdata->vif.type != NL80211_IFTYPE_ADHOC &&
3266 sdata->vif.type != NL80211_IFTYPE_MESH_POINT)
3267 break;
3268
3269 if (sdata->vif.type == NL80211_IFTYPE_STATION)
3270 bssid = sdata->u.mgd.bssid;
3271 else if (sdata->vif.type == NL80211_IFTYPE_ADHOC)
3272 bssid = sdata->u.ibss.bssid;
3273 else if (sdata->vif.type == NL80211_IFTYPE_MESH_POINT)
3274 bssid = mgmt->sa;
3275 else
3276 break;
3277
3278 if (!ether_addr_equal(mgmt->bssid, bssid))
3279 break;
3280
3281 goto queue;
3282 }
3283 }
3284 break;
3285 case WLAN_CATEGORY_SA_QUERY:
3286 if (len < (IEEE80211_MIN_ACTION_SIZE +
3287 sizeof(mgmt->u.action.u.sa_query)))
3288 break;
3289
3290 switch (mgmt->u.action.u.sa_query.action) {
3291 case WLAN_ACTION_SA_QUERY_REQUEST:
3292 if (sdata->vif.type != NL80211_IFTYPE_STATION)
3293 break;
3294 ieee80211_process_sa_query_req(sdata, mgmt, len);
3295 goto handled;
3296 }
3297 break;
3298 case WLAN_CATEGORY_SELF_PROTECTED:
3299 if (len < (IEEE80211_MIN_ACTION_SIZE +
3300 sizeof(mgmt->u.action.u.self_prot.action_code)))
3301 break;
3302
3303 switch (mgmt->u.action.u.self_prot.action_code) {
3304 case WLAN_SP_MESH_PEERING_OPEN:
3305 case WLAN_SP_MESH_PEERING_CLOSE:
3306 case WLAN_SP_MESH_PEERING_CONFIRM:
3307 if (!ieee80211_vif_is_mesh(&sdata->vif))
3308 goto invalid;
3309 if (sdata->u.mesh.user_mpm)
3310
3311 break;
3312 goto queue;
3313 case WLAN_SP_MGK_INFORM:
3314 case WLAN_SP_MGK_ACK:
3315 if (!ieee80211_vif_is_mesh(&sdata->vif))
3316 goto invalid;
3317 break;
3318 }
3319 break;
3320 case WLAN_CATEGORY_MESH_ACTION:
3321 if (len < (IEEE80211_MIN_ACTION_SIZE +
3322 sizeof(mgmt->u.action.u.mesh_action.action_code)))
3323 break;
3324
3325 if (!ieee80211_vif_is_mesh(&sdata->vif))
3326 break;
3327 if (mesh_action_is_path_sel(mgmt) &&
3328 !mesh_path_sel_is_hwmp(sdata))
3329 break;
3330 goto queue;
3331 }
3332
3333 return RX_CONTINUE;
3334
3335 invalid:
3336 status->rx_flags |= IEEE80211_RX_MALFORMED_ACTION_FRM;
3337
3338 return RX_CONTINUE;
3339
3340 handled:
3341 if (rx->sta)
3342 rx->sta->rx_stats.packets++;
3343 dev_kfree_skb(rx->skb);
3344 return RX_QUEUED;
3345
3346 queue:
3347 skb_queue_tail(&sdata->skb_queue, rx->skb);
3348 ieee80211_queue_work(&local->hw, &sdata->work);
3349 if (rx->sta)
3350 rx->sta->rx_stats.packets++;
3351 return RX_QUEUED;
3352}
3353
3354static ieee80211_rx_result debug_noinline
3355ieee80211_rx_h_userspace_mgmt(struct ieee80211_rx_data *rx)
3356{
3357 struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(rx->skb);
3358 int sig = 0;
3359
3360
3361 if (status->rx_flags & IEEE80211_RX_MALFORMED_ACTION_FRM)
3362 return RX_CONTINUE;
3363
3364
3365
3366
3367
3368
3369
3370
3371 if (ieee80211_hw_check(&rx->local->hw, SIGNAL_DBM) &&
3372 !(status->flag & RX_FLAG_NO_SIGNAL_VAL))
3373 sig = status->signal;
3374
3375 if (cfg80211_rx_mgmt(&rx->sdata->wdev, status->freq, sig,
3376 rx->skb->data, rx->skb->len, 0)) {
3377 if (rx->sta)
3378 rx->sta->rx_stats.packets++;
3379 dev_kfree_skb(rx->skb);
3380 return RX_QUEUED;
3381 }
3382
3383 return RX_CONTINUE;
3384}
3385
3386static ieee80211_rx_result debug_noinline
3387ieee80211_rx_h_action_return(struct ieee80211_rx_data *rx)
3388{
3389 struct ieee80211_local *local = rx->local;
3390 struct ieee80211_mgmt *mgmt = (struct ieee80211_mgmt *) rx->skb->data;
3391 struct sk_buff *nskb;
3392 struct ieee80211_sub_if_data *sdata = rx->sdata;
3393 struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(rx->skb);
3394
3395 if (!ieee80211_is_action(mgmt->frame_control))
3396 return RX_CONTINUE;
3397
3398
3399
3400
3401
3402
3403
3404
3405
3406
3407
3408 if (!(status->rx_flags & IEEE80211_RX_MALFORMED_ACTION_FRM) &&
3409 (sdata->vif.type == NL80211_IFTYPE_AP ||
3410 sdata->vif.type == NL80211_IFTYPE_AP_VLAN))
3411 return RX_DROP_MONITOR;
3412
3413 if (is_multicast_ether_addr(mgmt->da))
3414 return RX_DROP_MONITOR;
3415
3416
3417 if (mgmt->u.action.category & 0x80)
3418 return RX_DROP_UNUSABLE;
3419
3420 nskb = skb_copy_expand(rx->skb, local->hw.extra_tx_headroom, 0,
3421 GFP_ATOMIC);
3422 if (nskb) {
3423 struct ieee80211_mgmt *nmgmt = (void *)nskb->data;
3424
3425 nmgmt->u.action.category |= 0x80;
3426 memcpy(nmgmt->da, nmgmt->sa, ETH_ALEN);
3427 memcpy(nmgmt->sa, rx->sdata->vif.addr, ETH_ALEN);
3428
3429 memset(nskb->cb, 0, sizeof(nskb->cb));
3430
3431 if (rx->sdata->vif.type == NL80211_IFTYPE_P2P_DEVICE) {
3432 struct ieee80211_tx_info *info = IEEE80211_SKB_CB(nskb);
3433
3434 info->flags = IEEE80211_TX_CTL_TX_OFFCHAN |
3435 IEEE80211_TX_INTFL_OFFCHAN_TX_OK |
3436 IEEE80211_TX_CTL_NO_CCK_RATE;
3437 if (ieee80211_hw_check(&local->hw, QUEUE_CONTROL))
3438 info->hw_queue =
3439 local->hw.offchannel_tx_hw_queue;
3440 }
3441
3442 __ieee80211_tx_skb_tid_band(rx->sdata, nskb, 7,
3443 status->band, 0);
3444 }
3445 dev_kfree_skb(rx->skb);
3446 return RX_QUEUED;
3447}
3448
3449static ieee80211_rx_result debug_noinline
3450ieee80211_rx_h_mgmt(struct ieee80211_rx_data *rx)
3451{
3452 struct ieee80211_sub_if_data *sdata = rx->sdata;
3453 struct ieee80211_mgmt *mgmt = (void *)rx->skb->data;
3454 __le16 stype;
3455
3456 stype = mgmt->frame_control & cpu_to_le16(IEEE80211_FCTL_STYPE);
3457
3458 if (!ieee80211_vif_is_mesh(&sdata->vif) &&
3459 sdata->vif.type != NL80211_IFTYPE_ADHOC &&
3460 sdata->vif.type != NL80211_IFTYPE_OCB &&
3461 sdata->vif.type != NL80211_IFTYPE_STATION)
3462 return RX_DROP_MONITOR;
3463
3464 switch (stype) {
3465 case cpu_to_le16(IEEE80211_STYPE_AUTH):
3466 case cpu_to_le16(IEEE80211_STYPE_BEACON):
3467 case cpu_to_le16(IEEE80211_STYPE_PROBE_RESP):
3468
3469 break;
3470 case cpu_to_le16(IEEE80211_STYPE_ASSOC_RESP):
3471 case cpu_to_le16(IEEE80211_STYPE_REASSOC_RESP):
3472 case cpu_to_le16(IEEE80211_STYPE_DEAUTH):
3473 case cpu_to_le16(IEEE80211_STYPE_DISASSOC):
3474 if (is_multicast_ether_addr(mgmt->da) &&
3475 !is_broadcast_ether_addr(mgmt->da))
3476 return RX_DROP_MONITOR;
3477
3478
3479 if (sdata->vif.type != NL80211_IFTYPE_STATION)
3480 return RX_DROP_MONITOR;
3481 break;
3482 case cpu_to_le16(IEEE80211_STYPE_PROBE_REQ):
3483
3484 if (sdata->vif.type != NL80211_IFTYPE_ADHOC &&
3485 sdata->vif.type != NL80211_IFTYPE_MESH_POINT)
3486 return RX_DROP_MONITOR;
3487 break;
3488 default:
3489 return RX_DROP_MONITOR;
3490 }
3491
3492
3493 skb_queue_tail(&sdata->skb_queue, rx->skb);
3494 ieee80211_queue_work(&rx->local->hw, &sdata->work);
3495 if (rx->sta)
3496 rx->sta->rx_stats.packets++;
3497
3498 return RX_QUEUED;
3499}
3500
3501static void ieee80211_rx_cooked_monitor(struct ieee80211_rx_data *rx,
3502 struct ieee80211_rate *rate)
3503{
3504 struct ieee80211_sub_if_data *sdata;
3505 struct ieee80211_local *local = rx->local;
3506 struct sk_buff *skb = rx->skb, *skb2;
3507 struct net_device *prev_dev = NULL;
3508 struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(skb);
3509 int needed_headroom;
3510
3511
3512
3513
3514
3515 if (rx->flags & IEEE80211_RX_CMNTR)
3516 goto out_free_skb;
3517 rx->flags |= IEEE80211_RX_CMNTR;
3518
3519
3520 if (!local->cooked_mntrs)
3521 goto out_free_skb;
3522
3523
3524 status->flag &= ~RX_FLAG_RADIOTAP_VENDOR_DATA;
3525
3526 needed_headroom = ieee80211_rx_radiotap_hdrlen(local, status, skb);
3527
3528 if (skb_headroom(skb) < needed_headroom &&
3529 pskb_expand_head(skb, needed_headroom, 0, GFP_ATOMIC))
3530 goto out_free_skb;
3531
3532
3533 ieee80211_add_rx_radiotap_header(local, skb, rate, needed_headroom,
3534 false);
3535
3536 skb_reset_mac_header(skb);
3537 skb->ip_summed = CHECKSUM_UNNECESSARY;
3538 skb->pkt_type = PACKET_OTHERHOST;
3539 skb->protocol = htons(ETH_P_802_2);
3540
3541 list_for_each_entry_rcu(sdata, &local->interfaces, list) {
3542 if (!ieee80211_sdata_running(sdata))
3543 continue;
3544
3545 if (sdata->vif.type != NL80211_IFTYPE_MONITOR ||
3546 !(sdata->u.mntr.flags & MONITOR_FLAG_COOK_FRAMES))
3547 continue;
3548
3549 if (prev_dev) {
3550 skb2 = skb_clone(skb, GFP_ATOMIC);
3551 if (skb2) {
3552 skb2->dev = prev_dev;
3553 netif_receive_skb(skb2);
3554 }
3555 }
3556
3557 prev_dev = sdata->dev;
3558 ieee80211_rx_stats(sdata->dev, skb->len);
3559 }
3560
3561 if (prev_dev) {
3562 skb->dev = prev_dev;
3563 netif_receive_skb(skb);
3564 return;
3565 }
3566
3567 out_free_skb:
3568 dev_kfree_skb(skb);
3569}
3570
3571static void ieee80211_rx_handlers_result(struct ieee80211_rx_data *rx,
3572 ieee80211_rx_result res)
3573{
3574 switch (res) {
3575 case RX_DROP_MONITOR:
3576 I802_DEBUG_INC(rx->sdata->local->rx_handlers_drop);
3577 if (rx->sta)
3578 rx->sta->rx_stats.dropped++;
3579
3580 case RX_CONTINUE: {
3581 struct ieee80211_rate *rate = NULL;
3582 struct ieee80211_supported_band *sband;
3583 struct ieee80211_rx_status *status;
3584
3585 status = IEEE80211_SKB_RXCB((rx->skb));
3586
3587 sband = rx->local->hw.wiphy->bands[status->band];
3588 if (status->encoding == RX_ENC_LEGACY)
3589 rate = &sband->bitrates[status->rate_idx];
3590
3591 ieee80211_rx_cooked_monitor(rx, rate);
3592 break;
3593 }
3594 case RX_DROP_UNUSABLE:
3595 I802_DEBUG_INC(rx->sdata->local->rx_handlers_drop);
3596 if (rx->sta)
3597 rx->sta->rx_stats.dropped++;
3598 dev_kfree_skb(rx->skb);
3599 break;
3600 case RX_QUEUED:
3601 I802_DEBUG_INC(rx->sdata->local->rx_handlers_queued);
3602 break;
3603 }
3604}
3605
3606static void ieee80211_rx_handlers(struct ieee80211_rx_data *rx,
3607 struct sk_buff_head *frames)
3608{
3609 ieee80211_rx_result res = RX_DROP_MONITOR;
3610 struct sk_buff *skb;
3611
3612#define CALL_RXH(rxh) \
3613 do { \
3614 res = rxh(rx); \
3615 if (res != RX_CONTINUE) \
3616 goto rxh_next; \
3617 } while (0)
3618
3619
3620
3621
3622
3623
3624
3625 spin_lock_bh(&rx->local->rx_path_lock);
3626
3627 while ((skb = __skb_dequeue(frames))) {
3628
3629
3630
3631
3632
3633 rx->skb = skb;
3634
3635 CALL_RXH(ieee80211_rx_h_check_more_data);
3636 CALL_RXH(ieee80211_rx_h_uapsd_and_pspoll);
3637 CALL_RXH(ieee80211_rx_h_sta_process);
3638 CALL_RXH(ieee80211_rx_h_decrypt);
3639 CALL_RXH(ieee80211_rx_h_defragment);
3640 CALL_RXH(ieee80211_rx_h_michael_mic_verify);
3641
3642#ifdef CONFIG_MAC80211_MESH
3643 if (ieee80211_vif_is_mesh(&rx->sdata->vif))
3644 CALL_RXH(ieee80211_rx_h_mesh_fwding);
3645#endif
3646 CALL_RXH(ieee80211_rx_h_amsdu);
3647 CALL_RXH(ieee80211_rx_h_data);
3648
3649
3650 res = ieee80211_rx_h_ctrl(rx, frames);
3651 if (res != RX_CONTINUE)
3652 goto rxh_next;
3653
3654 CALL_RXH(ieee80211_rx_h_mgmt_check);
3655 CALL_RXH(ieee80211_rx_h_action);
3656 CALL_RXH(ieee80211_rx_h_userspace_mgmt);
3657 CALL_RXH(ieee80211_rx_h_action_return);
3658 CALL_RXH(ieee80211_rx_h_mgmt);
3659
3660 rxh_next:
3661 ieee80211_rx_handlers_result(rx, res);
3662
3663#undef CALL_RXH
3664 }
3665
3666 spin_unlock_bh(&rx->local->rx_path_lock);
3667}
3668
3669static void ieee80211_invoke_rx_handlers(struct ieee80211_rx_data *rx)
3670{
3671 struct sk_buff_head reorder_release;
3672 ieee80211_rx_result res = RX_DROP_MONITOR;
3673
3674 __skb_queue_head_init(&reorder_release);
3675
3676#define CALL_RXH(rxh) \
3677 do { \
3678 res = rxh(rx); \
3679 if (res != RX_CONTINUE) \
3680 goto rxh_next; \
3681 } while (0)
3682
3683 CALL_RXH(ieee80211_rx_h_check_dup);
3684 CALL_RXH(ieee80211_rx_h_check);
3685
3686 ieee80211_rx_reorder_ampdu(rx, &reorder_release);
3687
3688 ieee80211_rx_handlers(rx, &reorder_release);
3689 return;
3690
3691 rxh_next:
3692 ieee80211_rx_handlers_result(rx, res);
3693
3694#undef CALL_RXH
3695}
3696
3697
3698
3699
3700
3701void ieee80211_release_reorder_timeout(struct sta_info *sta, int tid)
3702{
3703 struct sk_buff_head frames;
3704 struct ieee80211_rx_data rx = {
3705 .sta = sta,
3706 .sdata = sta->sdata,
3707 .local = sta->local,
3708
3709 .security_idx = tid,
3710 .seqno_idx = tid,
3711 .napi = NULL,
3712 };
3713 struct tid_ampdu_rx *tid_agg_rx;
3714
3715 tid_agg_rx = rcu_dereference(sta->ampdu_mlme.tid_rx[tid]);
3716 if (!tid_agg_rx)
3717 return;
3718
3719 __skb_queue_head_init(&frames);
3720
3721 spin_lock(&tid_agg_rx->reorder_lock);
3722 ieee80211_sta_reorder_release(sta->sdata, tid_agg_rx, &frames);
3723 spin_unlock(&tid_agg_rx->reorder_lock);
3724
3725 if (!skb_queue_empty(&frames)) {
3726 struct ieee80211_event event = {
3727 .type = BA_FRAME_TIMEOUT,
3728 .u.ba.tid = tid,
3729 .u.ba.sta = &sta->sta,
3730 };
3731 drv_event_callback(rx.local, rx.sdata, &event);
3732 }
3733
3734 ieee80211_rx_handlers(&rx, &frames);
3735}
3736
3737void ieee80211_mark_rx_ba_filtered_frames(struct ieee80211_sta *pubsta, u8 tid,
3738 u16 ssn, u64 filtered,
3739 u16 received_mpdus)
3740{
3741 struct sta_info *sta;
3742 struct tid_ampdu_rx *tid_agg_rx;
3743 struct sk_buff_head frames;
3744 struct ieee80211_rx_data rx = {
3745
3746 .security_idx = tid,
3747 .seqno_idx = tid,
3748 };
3749 int i, diff;
3750
3751 if (WARN_ON(!pubsta || tid >= IEEE80211_NUM_TIDS))
3752 return;
3753
3754 __skb_queue_head_init(&frames);
3755
3756 sta = container_of(pubsta, struct sta_info, sta);
3757
3758 rx.sta = sta;
3759 rx.sdata = sta->sdata;
3760 rx.local = sta->local;
3761
3762 rcu_read_lock();
3763 tid_agg_rx = rcu_dereference(sta->ampdu_mlme.tid_rx[tid]);
3764 if (!tid_agg_rx)
3765 goto out;
3766
3767 spin_lock_bh(&tid_agg_rx->reorder_lock);
3768
3769 if (received_mpdus >= IEEE80211_SN_MODULO >> 1) {
3770 int release;
3771
3772
3773 release = (tid_agg_rx->head_seq_num + tid_agg_rx->buf_size) %
3774 IEEE80211_SN_MODULO;
3775 ieee80211_release_reorder_frames(sta->sdata, tid_agg_rx,
3776 release, &frames);
3777
3778 tid_agg_rx->head_seq_num = ssn;
3779 } else {
3780 ieee80211_release_reorder_frames(sta->sdata, tid_agg_rx, ssn,
3781 &frames);
3782 }
3783
3784
3785
3786 diff = (tid_agg_rx->head_seq_num - ssn) & IEEE80211_SN_MASK;
3787 if (diff >= tid_agg_rx->buf_size) {
3788 tid_agg_rx->reorder_buf_filtered = 0;
3789 goto release;
3790 }
3791 filtered = filtered >> diff;
3792 ssn += diff;
3793
3794
3795 for (i = 0; i < tid_agg_rx->buf_size; i++) {
3796 int index = (ssn + i) % tid_agg_rx->buf_size;
3797
3798 tid_agg_rx->reorder_buf_filtered &= ~BIT_ULL(index);
3799 if (filtered & BIT_ULL(i))
3800 tid_agg_rx->reorder_buf_filtered |= BIT_ULL(index);
3801 }
3802
3803
3804 ieee80211_sta_reorder_release(sta->sdata, tid_agg_rx, &frames);
3805
3806release:
3807 spin_unlock_bh(&tid_agg_rx->reorder_lock);
3808
3809 ieee80211_rx_handlers(&rx, &frames);
3810
3811 out:
3812 rcu_read_unlock();
3813}
3814EXPORT_SYMBOL(ieee80211_mark_rx_ba_filtered_frames);
3815
3816
3817
3818static bool ieee80211_accept_frame(struct ieee80211_rx_data *rx)
3819{
3820 struct ieee80211_sub_if_data *sdata = rx->sdata;
3821 struct sk_buff *skb = rx->skb;
3822 struct ieee80211_hdr *hdr = (void *)skb->data;
3823 struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(skb);
3824 u8 *bssid = ieee80211_get_bssid(hdr, skb->len, sdata->vif.type);
3825 bool multicast = is_multicast_ether_addr(hdr->addr1);
3826
3827 switch (sdata->vif.type) {
3828 case NL80211_IFTYPE_STATION:
3829 if (!bssid && !sdata->u.mgd.use_4addr)
3830 return false;
3831 if (ieee80211_is_robust_mgmt_frame(skb) && !rx->sta)
3832 return false;
3833 if (multicast)
3834 return true;
3835 return ether_addr_equal(sdata->vif.addr, hdr->addr1);
3836 case NL80211_IFTYPE_ADHOC:
3837 if (!bssid)
3838 return false;
3839 if (ether_addr_equal(sdata->vif.addr, hdr->addr2) ||
3840 ether_addr_equal(sdata->u.ibss.bssid, hdr->addr2))
3841 return false;
3842 if (ieee80211_is_beacon(hdr->frame_control))
3843 return true;
3844 if (!ieee80211_bssid_match(bssid, sdata->u.ibss.bssid))
3845 return false;
3846 if (!multicast &&
3847 !ether_addr_equal(sdata->vif.addr, hdr->addr1))
3848 return false;
3849 if (!rx->sta) {
3850 int rate_idx;
3851 if (status->encoding != RX_ENC_LEGACY)
3852 rate_idx = 0;
3853 else
3854 rate_idx = status->rate_idx;
3855 ieee80211_ibss_rx_no_sta(sdata, bssid, hdr->addr2,
3856 BIT(rate_idx));
3857 }
3858 return true;
3859 case NL80211_IFTYPE_OCB:
3860 if (!bssid)
3861 return false;
3862 if (!ieee80211_is_data_present(hdr->frame_control))
3863 return false;
3864 if (!is_broadcast_ether_addr(bssid))
3865 return false;
3866 if (!multicast &&
3867 !ether_addr_equal(sdata->dev->dev_addr, hdr->addr1))
3868 return false;
3869 if (!rx->sta) {
3870 int rate_idx;
3871 if (status->encoding != RX_ENC_LEGACY)
3872 rate_idx = 0;
3873 else
3874 rate_idx = status->rate_idx;
3875 ieee80211_ocb_rx_no_sta(sdata, bssid, hdr->addr2,
3876 BIT(rate_idx));
3877 }
3878 return true;
3879 case NL80211_IFTYPE_MESH_POINT:
3880 if (ether_addr_equal(sdata->vif.addr, hdr->addr2))
3881 return false;
3882 if (multicast)
3883 return true;
3884 return ether_addr_equal(sdata->vif.addr, hdr->addr1);
3885 case NL80211_IFTYPE_AP_VLAN:
3886 case NL80211_IFTYPE_AP:
3887 if (!bssid)
3888 return ether_addr_equal(sdata->vif.addr, hdr->addr1);
3889
3890 if (!ieee80211_bssid_match(bssid, sdata->vif.addr)) {
3891
3892
3893
3894
3895
3896
3897 if (!multicast &&
3898 !ether_addr_equal(sdata->vif.addr, hdr->addr1))
3899 return false;
3900 if (ieee80211_is_public_action(hdr, skb->len))
3901 return true;
3902 return ieee80211_is_beacon(hdr->frame_control);
3903 }
3904
3905 if (!ieee80211_has_tods(hdr->frame_control)) {
3906
3907 if (ieee80211_is_data(hdr->frame_control))
3908 return false;
3909
3910 if (ieee80211_is_action(hdr->frame_control) &&
3911 !is_broadcast_ether_addr(bssid) &&
3912 !ether_addr_equal(bssid, hdr->addr1))
3913 return false;
3914 }
3915
3916
3917
3918
3919
3920
3921
3922
3923
3924
3925
3926
3927
3928
3929
3930
3931
3932
3933 if (ieee80211_is_data(hdr->frame_control) && multicast)
3934 return false;
3935
3936 return true;
3937 case NL80211_IFTYPE_WDS:
3938 if (bssid || !ieee80211_is_data(hdr->frame_control))
3939 return false;
3940 return ether_addr_equal(sdata->u.wds.remote_addr, hdr->addr2);
3941 case NL80211_IFTYPE_P2P_DEVICE:
3942 return ieee80211_is_public_action(hdr, skb->len) ||
3943 ieee80211_is_probe_req(hdr->frame_control) ||
3944 ieee80211_is_probe_resp(hdr->frame_control) ||
3945 ieee80211_is_beacon(hdr->frame_control);
3946 case NL80211_IFTYPE_NAN:
3947
3948 return false;
3949 default:
3950 break;
3951 }
3952
3953 WARN_ON_ONCE(1);
3954 return false;
3955}
3956
3957void ieee80211_check_fast_rx(struct sta_info *sta)
3958{
3959 struct ieee80211_sub_if_data *sdata = sta->sdata;
3960 struct ieee80211_local *local = sdata->local;
3961 struct ieee80211_key *key;
3962 struct ieee80211_fast_rx fastrx = {
3963 .dev = sdata->dev,
3964 .vif_type = sdata->vif.type,
3965 .control_port_protocol = sdata->control_port_protocol,
3966 }, *old, *new = NULL;
3967 bool assign = false;
3968
3969
3970 __acquire(check_fast_rx);
3971
3972 BUILD_BUG_ON(sizeof(fastrx.rfc1042_hdr) != sizeof(rfc1042_header));
3973 BUILD_BUG_ON(sizeof(fastrx.rfc1042_hdr) != ETH_ALEN);
3974 ether_addr_copy(fastrx.rfc1042_hdr, rfc1042_header);
3975 ether_addr_copy(fastrx.vif_addr, sdata->vif.addr);
3976
3977 fastrx.uses_rss = ieee80211_hw_check(&local->hw, USES_RSS);
3978
3979
3980 if (ieee80211_hw_check(&local->hw, AMPDU_AGGREGATION) &&
3981 !ieee80211_hw_check(&local->hw, SUPPORTS_REORDERING_BUFFER))
3982 goto clear;
3983
3984 switch (sdata->vif.type) {
3985 case NL80211_IFTYPE_STATION:
3986 if (sta->sta.tdls) {
3987 fastrx.da_offs = offsetof(struct ieee80211_hdr, addr1);
3988 fastrx.sa_offs = offsetof(struct ieee80211_hdr, addr2);
3989 fastrx.expected_ds_bits = 0;
3990 } else {
3991 fastrx.sta_notify = sdata->u.mgd.probe_send_count > 0;
3992 fastrx.da_offs = offsetof(struct ieee80211_hdr, addr1);
3993 fastrx.sa_offs = offsetof(struct ieee80211_hdr, addr3);
3994 fastrx.expected_ds_bits =
3995 cpu_to_le16(IEEE80211_FCTL_FROMDS);
3996 }
3997
3998 if (sdata->u.mgd.use_4addr && !sta->sta.tdls) {
3999 fastrx.expected_ds_bits |=
4000 cpu_to_le16(IEEE80211_FCTL_TODS);
4001 fastrx.da_offs = offsetof(struct ieee80211_hdr, addr3);
4002 fastrx.sa_offs = offsetof(struct ieee80211_hdr, addr4);
4003 }
4004
4005 if (!sdata->u.mgd.powersave)
4006 break;
4007
4008
4009 if (ieee80211_hw_check(&local->hw, PS_NULLFUNC_STACK))
4010 goto clear;
4011 if (ieee80211_hw_check(&local->hw, SUPPORTS_PS) &&
4012 !ieee80211_hw_check(&local->hw, SUPPORTS_DYNAMIC_PS))
4013 goto clear;
4014 break;
4015 case NL80211_IFTYPE_AP_VLAN:
4016 case NL80211_IFTYPE_AP:
4017
4018
4019
4020 if (!ieee80211_hw_check(&local->hw, AP_LINK_PS))
4021 goto clear;
4022 fastrx.da_offs = offsetof(struct ieee80211_hdr, addr3);
4023 fastrx.sa_offs = offsetof(struct ieee80211_hdr, addr2);
4024 fastrx.expected_ds_bits = cpu_to_le16(IEEE80211_FCTL_TODS);
4025
4026 fastrx.internal_forward =
4027 !(sdata->flags & IEEE80211_SDATA_DONT_BRIDGE_PACKETS) &&
4028 (sdata->vif.type != NL80211_IFTYPE_AP_VLAN ||
4029 !sdata->u.vlan.sta);
4030
4031 if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN &&
4032 sdata->u.vlan.sta) {
4033 fastrx.expected_ds_bits |=
4034 cpu_to_le16(IEEE80211_FCTL_FROMDS);
4035 fastrx.sa_offs = offsetof(struct ieee80211_hdr, addr4);
4036 fastrx.internal_forward = 0;
4037 }
4038
4039 break;
4040 default:
4041 goto clear;
4042 }
4043
4044 if (!test_sta_flag(sta, WLAN_STA_AUTHORIZED))
4045 goto clear;
4046
4047 rcu_read_lock();
4048 key = rcu_dereference(sta->ptk[sta->ptk_idx]);
4049 if (key) {
4050 switch (key->conf.cipher) {
4051 case WLAN_CIPHER_SUITE_TKIP:
4052
4053 goto clear_rcu;
4054 case WLAN_CIPHER_SUITE_CCMP:
4055 case WLAN_CIPHER_SUITE_CCMP_256:
4056 case WLAN_CIPHER_SUITE_GCMP:
4057 case WLAN_CIPHER_SUITE_GCMP_256:
4058 break;
4059 default:
4060
4061
4062
4063 goto clear_rcu;
4064 }
4065
4066 fastrx.key = true;
4067 fastrx.icv_len = key->conf.icv_len;
4068 }
4069
4070 assign = true;
4071 clear_rcu:
4072 rcu_read_unlock();
4073 clear:
4074 __release(check_fast_rx);
4075
4076 if (assign)
4077 new = kmemdup(&fastrx, sizeof(fastrx), GFP_KERNEL);
4078
4079 spin_lock_bh(&sta->lock);
4080 old = rcu_dereference_protected(sta->fast_rx, true);
4081 rcu_assign_pointer(sta->fast_rx, new);
4082 spin_unlock_bh(&sta->lock);
4083
4084 if (old)
4085 kfree_rcu(old, rcu_head);
4086}
4087
4088void ieee80211_clear_fast_rx(struct sta_info *sta)
4089{
4090 struct ieee80211_fast_rx *old;
4091
4092 spin_lock_bh(&sta->lock);
4093 old = rcu_dereference_protected(sta->fast_rx, true);
4094 RCU_INIT_POINTER(sta->fast_rx, NULL);
4095 spin_unlock_bh(&sta->lock);
4096
4097 if (old)
4098 kfree_rcu(old, rcu_head);
4099}
4100
4101void __ieee80211_check_fast_rx_iface(struct ieee80211_sub_if_data *sdata)
4102{
4103 struct ieee80211_local *local = sdata->local;
4104 struct sta_info *sta;
4105
4106 lockdep_assert_held(&local->sta_mtx);
4107
4108 list_for_each_entry_rcu(sta, &local->sta_list, list) {
4109 if (sdata != sta->sdata &&
4110 (!sta->sdata->bss || sta->sdata->bss != sdata->bss))
4111 continue;
4112 ieee80211_check_fast_rx(sta);
4113 }
4114}
4115
4116void ieee80211_check_fast_rx_iface(struct ieee80211_sub_if_data *sdata)
4117{
4118 struct ieee80211_local *local = sdata->local;
4119
4120 mutex_lock(&local->sta_mtx);
4121 __ieee80211_check_fast_rx_iface(sdata);
4122 mutex_unlock(&local->sta_mtx);
4123}
4124
4125static bool ieee80211_invoke_fast_rx(struct ieee80211_rx_data *rx,
4126 struct ieee80211_fast_rx *fast_rx)
4127{
4128 struct sk_buff *skb = rx->skb;
4129 struct ieee80211_hdr *hdr = (void *)skb->data;
4130 struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(skb);
4131 struct sta_info *sta = rx->sta;
4132 int orig_len = skb->len;
4133 int hdrlen = ieee80211_hdrlen(hdr->frame_control);
4134 int snap_offs = hdrlen;
4135 struct {
4136 u8 snap[sizeof(rfc1042_header)];
4137 __be16 proto;
4138 } *payload __aligned(2);
4139 struct {
4140 u8 da[ETH_ALEN];
4141 u8 sa[ETH_ALEN];
4142 } addrs __aligned(2);
4143 struct ieee80211_sta_rx_stats *stats = &sta->rx_stats;
4144
4145 if (fast_rx->uses_rss)
4146 stats = this_cpu_ptr(sta->pcpu_rx_stats);
4147
4148
4149
4150
4151
4152 if (!(status->flag & RX_FLAG_DUP_VALIDATED))
4153 return false;
4154
4155#define FAST_RX_CRYPT_FLAGS (RX_FLAG_PN_VALIDATED | RX_FLAG_DECRYPTED)
4156
4157
4158
4159
4160
4161 if (fast_rx->key &&
4162 (status->flag & FAST_RX_CRYPT_FLAGS) != FAST_RX_CRYPT_FLAGS)
4163 return false;
4164
4165 if (unlikely(!ieee80211_is_data_present(hdr->frame_control)))
4166 return false;
4167
4168 if (unlikely(ieee80211_is_frag(hdr)))
4169 return false;
4170
4171
4172
4173
4174
4175
4176
4177
4178
4179
4180 if (!ether_addr_equal(fast_rx->vif_addr, hdr->addr1))
4181 return false;
4182
4183 if ((hdr->frame_control & cpu_to_le16(IEEE80211_FCTL_FROMDS |
4184 IEEE80211_FCTL_TODS)) !=
4185 fast_rx->expected_ds_bits)
4186 return false;
4187
4188
4189
4190
4191 if (fast_rx->key && !(status->flag & RX_FLAG_IV_STRIPPED)) {
4192
4193 snap_offs += IEEE80211_CCMP_HDR_LEN;
4194 }
4195
4196 if (!(status->rx_flags & IEEE80211_RX_AMSDU)) {
4197 if (!pskb_may_pull(skb, snap_offs + sizeof(*payload)))
4198 goto drop;
4199
4200 payload = (void *)(skb->data + snap_offs);
4201
4202 if (!ether_addr_equal(payload->snap, fast_rx->rfc1042_hdr))
4203 return false;
4204
4205
4206
4207
4208
4209
4210 if (unlikely(payload->proto == cpu_to_be16(ETH_P_TDLS) ||
4211 payload->proto == fast_rx->control_port_protocol))
4212 return false;
4213 }
4214
4215
4216
4217 if (rx->key && !(status->flag & RX_FLAG_MIC_STRIPPED) &&
4218 pskb_trim(skb, skb->len - fast_rx->icv_len))
4219 goto drop;
4220
4221 if (unlikely(fast_rx->sta_notify)) {
4222 ieee80211_sta_rx_notify(rx->sdata, hdr);
4223 fast_rx->sta_notify = false;
4224 }
4225
4226
4227 if (!(status->flag & RX_FLAG_NO_SIGNAL_VAL)) {
4228 stats->last_signal = status->signal;
4229 if (!fast_rx->uses_rss)
4230 ewma_signal_add(&sta->rx_stats_avg.signal,
4231 -status->signal);
4232 }
4233
4234 if (status->chains) {
4235 int i;
4236
4237 stats->chains = status->chains;
4238 for (i = 0; i < ARRAY_SIZE(status->chain_signal); i++) {
4239 int signal = status->chain_signal[i];
4240
4241 if (!(status->chains & BIT(i)))
4242 continue;
4243
4244 stats->chain_signal_last[i] = signal;
4245 if (!fast_rx->uses_rss)
4246 ewma_signal_add(&sta->rx_stats_avg.chain_signal[i],
4247 -signal);
4248 }
4249 }
4250
4251
4252 if (rx->key && !ieee80211_has_protected(hdr->frame_control))
4253 goto drop;
4254
4255 if (status->rx_flags & IEEE80211_RX_AMSDU) {
4256 if (__ieee80211_rx_h_amsdu(rx, snap_offs - hdrlen) !=
4257 RX_QUEUED)
4258 goto drop;
4259
4260 return true;
4261 }
4262
4263 stats->last_rx = jiffies;
4264 stats->last_rate = sta_stats_encode_rate(status);
4265
4266 stats->fragments++;
4267 stats->packets++;
4268
4269
4270 ether_addr_copy(addrs.da, skb->data + fast_rx->da_offs);
4271 ether_addr_copy(addrs.sa, skb->data + fast_rx->sa_offs);
4272
4273 skb_pull(skb, snap_offs + sizeof(rfc1042_header));
4274
4275 memcpy(skb_push(skb, sizeof(addrs)), &addrs, sizeof(addrs));
4276
4277 skb->dev = fast_rx->dev;
4278
4279 ieee80211_rx_stats(fast_rx->dev, skb->len);
4280
4281
4282
4283
4284
4285
4286 u64_stats_update_begin(&stats->syncp);
4287 stats->msdu[rx->seqno_idx]++;
4288 stats->bytes += orig_len;
4289 u64_stats_update_end(&stats->syncp);
4290
4291 if (fast_rx->internal_forward) {
4292 struct sk_buff *xmit_skb = NULL;
4293 if (is_multicast_ether_addr(addrs.da)) {
4294 xmit_skb = skb_copy(skb, GFP_ATOMIC);
4295 } else if (!ether_addr_equal(addrs.da, addrs.sa) &&
4296 sta_info_get(rx->sdata, addrs.da)) {
4297 xmit_skb = skb;
4298 skb = NULL;
4299 }
4300
4301 if (xmit_skb) {
4302
4303
4304
4305
4306
4307 xmit_skb->priority += 256;
4308 xmit_skb->protocol = htons(ETH_P_802_3);
4309 skb_reset_network_header(xmit_skb);
4310 skb_reset_mac_header(xmit_skb);
4311 dev_queue_xmit(xmit_skb);
4312 }
4313
4314 if (!skb)
4315 return true;
4316 }
4317
4318
4319 skb->protocol = eth_type_trans(skb, fast_rx->dev);
4320 memset(skb->cb, 0, sizeof(skb->cb));
4321 if (rx->napi)
4322 napi_gro_receive(rx->napi, skb);
4323 else
4324 netif_receive_skb(skb);
4325
4326 return true;
4327 drop:
4328 dev_kfree_skb(skb);
4329 stats->dropped++;
4330 return true;
4331}
4332
4333
4334
4335
4336
4337
4338
4339static bool ieee80211_prepare_and_rx_handle(struct ieee80211_rx_data *rx,
4340 struct sk_buff *skb, bool consume)
4341{
4342 struct ieee80211_local *local = rx->local;
4343 struct ieee80211_sub_if_data *sdata = rx->sdata;
4344
4345 rx->skb = skb;
4346
4347
4348
4349
4350
4351
4352
4353
4354 if (consume && rx->sta) {
4355 struct ieee80211_fast_rx *fast_rx;
4356
4357 fast_rx = rcu_dereference(rx->sta->fast_rx);
4358 if (fast_rx && ieee80211_invoke_fast_rx(rx, fast_rx))
4359 return true;
4360 }
4361
4362 if (!ieee80211_accept_frame(rx))
4363 return false;
4364
4365 if (!consume) {
4366 skb = skb_copy(skb, GFP_ATOMIC);
4367 if (!skb) {
4368 if (net_ratelimit())
4369 wiphy_debug(local->hw.wiphy,
4370 "failed to copy skb for %s\n",
4371 sdata->name);
4372 return true;
4373 }
4374
4375 rx->skb = skb;
4376 }
4377
4378 ieee80211_invoke_rx_handlers(rx);
4379 return true;
4380}
4381
4382
4383
4384
4385
4386static void __ieee80211_rx_handle_packet(struct ieee80211_hw *hw,
4387 struct ieee80211_sta *pubsta,
4388 struct sk_buff *skb,
4389 struct napi_struct *napi)
4390{
4391 struct ieee80211_local *local = hw_to_local(hw);
4392 struct ieee80211_sub_if_data *sdata;
4393 struct ieee80211_hdr *hdr;
4394 __le16 fc;
4395 struct ieee80211_rx_data rx;
4396 struct ieee80211_sub_if_data *prev;
4397 struct rhlist_head *tmp;
4398 int err = 0;
4399
4400 fc = ((struct ieee80211_hdr *)skb->data)->frame_control;
4401 memset(&rx, 0, sizeof(rx));
4402 rx.skb = skb;
4403 rx.local = local;
4404 rx.napi = napi;
4405
4406 if (ieee80211_is_data(fc) || ieee80211_is_mgmt(fc))
4407 I802_DEBUG_INC(local->dot11ReceivedFragmentCount);
4408
4409 if (ieee80211_is_mgmt(fc)) {
4410
4411 if (skb->len < ieee80211_hdrlen(fc))
4412 err = -ENOBUFS;
4413 else
4414 err = skb_linearize(skb);
4415 } else {
4416 err = !pskb_may_pull(skb, ieee80211_hdrlen(fc));
4417 }
4418
4419 if (err) {
4420 dev_kfree_skb(skb);
4421 return;
4422 }
4423
4424 hdr = (struct ieee80211_hdr *)skb->data;
4425 ieee80211_parse_qos(&rx);
4426 ieee80211_verify_alignment(&rx);
4427
4428 if (unlikely(ieee80211_is_probe_resp(hdr->frame_control) ||
4429 ieee80211_is_beacon(hdr->frame_control)))
4430 ieee80211_scan_rx(local, skb);
4431
4432 if (ieee80211_is_data(fc)) {
4433 struct sta_info *sta, *prev_sta;
4434
4435 if (pubsta) {
4436 rx.sta = container_of(pubsta, struct sta_info, sta);
4437 rx.sdata = rx.sta->sdata;
4438 if (ieee80211_prepare_and_rx_handle(&rx, skb, true))
4439 return;
4440 goto out;
4441 }
4442
4443 prev_sta = NULL;
4444
4445 for_each_sta_info(local, hdr->addr2, sta, tmp) {
4446 if (!prev_sta) {
4447 prev_sta = sta;
4448 continue;
4449 }
4450
4451 rx.sta = prev_sta;
4452 rx.sdata = prev_sta->sdata;
4453 ieee80211_prepare_and_rx_handle(&rx, skb, false);
4454
4455 prev_sta = sta;
4456 }
4457
4458 if (prev_sta) {
4459 rx.sta = prev_sta;
4460 rx.sdata = prev_sta->sdata;
4461
4462 if (ieee80211_prepare_and_rx_handle(&rx, skb, true))
4463 return;
4464 goto out;
4465 }
4466 }
4467
4468 prev = NULL;
4469
4470 list_for_each_entry_rcu(sdata, &local->interfaces, list) {
4471 if (!ieee80211_sdata_running(sdata))
4472 continue;
4473
4474 if (sdata->vif.type == NL80211_IFTYPE_MONITOR ||
4475 sdata->vif.type == NL80211_IFTYPE_AP_VLAN)
4476 continue;
4477
4478
4479
4480
4481
4482
4483
4484 if (!prev) {
4485 prev = sdata;
4486 continue;
4487 }
4488
4489 rx.sta = sta_info_get_bss(prev, hdr->addr2);
4490 rx.sdata = prev;
4491 ieee80211_prepare_and_rx_handle(&rx, skb, false);
4492
4493 prev = sdata;
4494 }
4495
4496 if (prev) {
4497 rx.sta = sta_info_get_bss(prev, hdr->addr2);
4498 rx.sdata = prev;
4499
4500 if (ieee80211_prepare_and_rx_handle(&rx, skb, true))
4501 return;
4502 }
4503
4504 out:
4505 dev_kfree_skb(skb);
4506}
4507
4508
4509
4510
4511
4512void ieee80211_rx_napi(struct ieee80211_hw *hw, struct ieee80211_sta *pubsta,
4513 struct sk_buff *skb, struct napi_struct *napi)
4514{
4515 struct ieee80211_local *local = hw_to_local(hw);
4516 struct ieee80211_rate *rate = NULL;
4517 struct ieee80211_supported_band *sband;
4518 struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(skb);
4519
4520 WARN_ON_ONCE(softirq_count() == 0);
4521
4522 if (WARN_ON(status->band >= NUM_NL80211_BANDS))
4523 goto drop;
4524
4525 sband = local->hw.wiphy->bands[status->band];
4526 if (WARN_ON(!sband))
4527 goto drop;
4528
4529
4530
4531
4532
4533
4534
4535
4536 if (unlikely(local->quiescing || local->suspended))
4537 goto drop;
4538
4539
4540 if (unlikely(local->in_reconfig))
4541 goto drop;
4542
4543
4544
4545
4546
4547 if (WARN_ON(!local->started))
4548 goto drop;
4549
4550 if (likely(!(status->flag & RX_FLAG_FAILED_PLCP_CRC))) {
4551
4552
4553
4554
4555
4556 switch (status->encoding) {
4557 case RX_ENC_HT:
4558
4559
4560
4561
4562
4563
4564
4565
4566
4567
4568 if (WARN(status->rate_idx > 76,
4569 "Rate marked as an HT rate but passed "
4570 "status->rate_idx is not "
4571 "an MCS index [0-76]: %d (0x%02x)\n",
4572 status->rate_idx,
4573 status->rate_idx))
4574 goto drop;
4575 break;
4576 case RX_ENC_VHT:
4577 if (WARN_ONCE(status->rate_idx > 9 ||
4578 !status->nss ||
4579 status->nss > 8,
4580 "Rate marked as a VHT rate but data is invalid: MCS: %d, NSS: %d\n",
4581 status->rate_idx, status->nss))
4582 goto drop;
4583 break;
4584 case RX_ENC_HE:
4585 if (WARN_ONCE(status->rate_idx > 11 ||
4586 !status->nss ||
4587 status->nss > 8,
4588 "Rate marked as an HE rate but data is invalid: MCS: %d, NSS: %d\n",
4589 status->rate_idx, status->nss))
4590 goto drop;
4591 break;
4592 default:
4593 WARN_ON_ONCE(1);
4594
4595 case RX_ENC_LEGACY:
4596 if (WARN_ON(status->rate_idx >= sband->n_bitrates))
4597 goto drop;
4598 rate = &sband->bitrates[status->rate_idx];
4599 }
4600 }
4601
4602 status->rx_flags = 0;
4603
4604
4605
4606
4607
4608
4609 rcu_read_lock();
4610
4611
4612
4613
4614
4615
4616
4617 skb = ieee80211_rx_monitor(local, skb, rate);
4618 if (!skb) {
4619 rcu_read_unlock();
4620 return;
4621 }
4622
4623 ieee80211_tpt_led_trig_rx(local,
4624 ((struct ieee80211_hdr *)skb->data)->frame_control,
4625 skb->len);
4626
4627 __ieee80211_rx_handle_packet(hw, pubsta, skb, napi);
4628
4629 rcu_read_unlock();
4630
4631 return;
4632 drop:
4633 kfree_skb(skb);
4634}
4635EXPORT_SYMBOL(ieee80211_rx_napi);
4636
4637
4638
4639void ieee80211_rx_irqsafe(struct ieee80211_hw *hw, struct sk_buff *skb)
4640{
4641 struct ieee80211_local *local = hw_to_local(hw);
4642
4643 BUILD_BUG_ON(sizeof(struct ieee80211_rx_status) > sizeof(skb->cb));
4644
4645 skb->pkt_type = IEEE80211_RX_MSG;
4646 skb_queue_tail(&local->skb_queue, skb);
4647 tasklet_schedule(&local->tasklet);
4648}
4649EXPORT_SYMBOL(ieee80211_rx_irqsafe);
4650