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