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