1
2
3
4
5
6
7
8
9
10
11
12#include <linux/jiffies.h>
13#include <linux/slab.h>
14#include <linux/kernel.h>
15#include <linux/skbuff.h>
16#include <linux/netdevice.h>
17#include <linux/etherdevice.h>
18#include <linux/rcupdate.h>
19#include <net/mac80211.h>
20#include <net/ieee80211_radiotap.h>
21
22#include "ieee80211_i.h"
23#include "driver-ops.h"
24#include "led.h"
25#include "mesh.h"
26#include "wep.h"
27#include "wpa.h"
28#include "tkip.h"
29#include "wme.h"
30
31
32
33
34
35
36
37static struct sk_buff *remove_monitor_info(struct ieee80211_local *local,
38 struct sk_buff *skb)
39{
40 if (local->hw.flags & IEEE80211_HW_RX_INCLUDES_FCS) {
41 if (likely(skb->len > FCS_LEN))
42 __pskb_trim(skb, skb->len - FCS_LEN);
43 else {
44
45 WARN_ON(1);
46 dev_kfree_skb(skb);
47 skb = NULL;
48 }
49 }
50
51 return skb;
52}
53
54static inline int should_drop_frame(struct sk_buff *skb,
55 int present_fcs_len)
56{
57 struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(skb);
58 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
59
60 if (status->flag & (RX_FLAG_FAILED_FCS_CRC | RX_FLAG_FAILED_PLCP_CRC))
61 return 1;
62 if (unlikely(skb->len < 16 + present_fcs_len))
63 return 1;
64 if (ieee80211_is_ctl(hdr->frame_control) &&
65 !ieee80211_is_pspoll(hdr->frame_control) &&
66 !ieee80211_is_back_req(hdr->frame_control))
67 return 1;
68 return 0;
69}
70
71static int
72ieee80211_rx_radiotap_len(struct ieee80211_local *local,
73 struct ieee80211_rx_status *status)
74{
75 int len;
76
77
78 len = sizeof(struct ieee80211_radiotap_header) + 9;
79
80 if (status->flag & RX_FLAG_TSFT)
81 len += 8;
82 if (local->hw.flags & IEEE80211_HW_SIGNAL_DBM)
83 len += 1;
84
85 if (len & 1)
86 len++;
87
88 return len;
89}
90
91
92
93
94
95
96static void
97ieee80211_add_rx_radiotap_header(struct ieee80211_local *local,
98 struct sk_buff *skb,
99 struct ieee80211_rate *rate,
100 int rtap_len)
101{
102 struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(skb);
103 struct ieee80211_radiotap_header *rthdr;
104 unsigned char *pos;
105 u16 rx_flags = 0;
106
107 rthdr = (struct ieee80211_radiotap_header *)skb_push(skb, rtap_len);
108 memset(rthdr, 0, rtap_len);
109
110
111 rthdr->it_present =
112 cpu_to_le32((1 << IEEE80211_RADIOTAP_FLAGS) |
113 (1 << IEEE80211_RADIOTAP_CHANNEL) |
114 (1 << IEEE80211_RADIOTAP_ANTENNA) |
115 (1 << IEEE80211_RADIOTAP_RX_FLAGS));
116 rthdr->it_len = cpu_to_le16(rtap_len);
117
118 pos = (unsigned char *)(rthdr+1);
119
120
121
122
123 if (status->flag & RX_FLAG_TSFT) {
124 put_unaligned_le64(status->mactime, pos);
125 rthdr->it_present |=
126 cpu_to_le32(1 << IEEE80211_RADIOTAP_TSFT);
127 pos += 8;
128 }
129
130
131 if (local->hw.flags & IEEE80211_HW_RX_INCLUDES_FCS)
132 *pos |= IEEE80211_RADIOTAP_F_FCS;
133 if (status->flag & (RX_FLAG_FAILED_FCS_CRC | RX_FLAG_FAILED_PLCP_CRC))
134 *pos |= IEEE80211_RADIOTAP_F_BADFCS;
135 if (status->flag & RX_FLAG_SHORTPRE)
136 *pos |= IEEE80211_RADIOTAP_F_SHORTPRE;
137 pos++;
138
139
140 if (status->flag & RX_FLAG_HT) {
141
142
143
144
145
146
147
148 *pos = 0;
149 } else {
150 rthdr->it_present |= cpu_to_le32(1 << IEEE80211_RADIOTAP_RATE);
151 *pos = rate->bitrate / 5;
152 }
153 pos++;
154
155
156 put_unaligned_le16(status->freq, pos);
157 pos += 2;
158 if (status->band == IEEE80211_BAND_5GHZ)
159 put_unaligned_le16(IEEE80211_CHAN_OFDM | IEEE80211_CHAN_5GHZ,
160 pos);
161 else if (status->flag & RX_FLAG_HT)
162 put_unaligned_le16(IEEE80211_CHAN_DYN | IEEE80211_CHAN_2GHZ,
163 pos);
164 else if (rate->flags & IEEE80211_RATE_ERP_G)
165 put_unaligned_le16(IEEE80211_CHAN_OFDM | IEEE80211_CHAN_2GHZ,
166 pos);
167 else
168 put_unaligned_le16(IEEE80211_CHAN_CCK | IEEE80211_CHAN_2GHZ,
169 pos);
170 pos += 2;
171
172
173 if (local->hw.flags & IEEE80211_HW_SIGNAL_DBM) {
174 *pos = status->signal;
175 rthdr->it_present |=
176 cpu_to_le32(1 << IEEE80211_RADIOTAP_DBM_ANTSIGNAL);
177 pos++;
178 }
179
180
181
182
183 *pos = status->antenna;
184 pos++;
185
186
187
188
189
190 if ((pos - (u8 *)rthdr) & 1)
191 pos++;
192 if (status->flag & RX_FLAG_FAILED_PLCP_CRC)
193 rx_flags |= IEEE80211_RADIOTAP_F_RX_BADPLCP;
194 put_unaligned_le16(rx_flags, pos);
195 pos += 2;
196}
197
198
199
200
201
202
203static struct sk_buff *
204ieee80211_rx_monitor(struct ieee80211_local *local, struct sk_buff *origskb,
205 struct ieee80211_rate *rate)
206{
207 struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(origskb);
208 struct ieee80211_sub_if_data *sdata;
209 int needed_headroom = 0;
210 struct sk_buff *skb, *skb2;
211 struct net_device *prev_dev = NULL;
212 int present_fcs_len = 0;
213
214
215
216
217
218
219
220
221
222
223
224 needed_headroom = ieee80211_rx_radiotap_len(local, status);
225
226 if (local->hw.flags & IEEE80211_HW_RX_INCLUDES_FCS)
227 present_fcs_len = FCS_LEN;
228
229
230 if (!pskb_may_pull(origskb, 2)) {
231 dev_kfree_skb(origskb);
232 return NULL;
233 }
234
235 if (!local->monitors) {
236 if (should_drop_frame(origskb, present_fcs_len)) {
237 dev_kfree_skb(origskb);
238 return NULL;
239 }
240
241 return remove_monitor_info(local, origskb);
242 }
243
244 if (should_drop_frame(origskb, present_fcs_len)) {
245
246 skb = origskb;
247 origskb = NULL;
248
249
250
251
252
253
254
255
256 if (skb_headroom(skb) < needed_headroom &&
257 pskb_expand_head(skb, needed_headroom, 0, GFP_ATOMIC)) {
258 dev_kfree_skb(skb);
259 return NULL;
260 }
261 } else {
262
263
264
265
266 skb = skb_copy_expand(origskb, needed_headroom, 0, GFP_ATOMIC);
267
268 origskb = remove_monitor_info(local, origskb);
269
270 if (!skb)
271 return origskb;
272 }
273
274
275 ieee80211_add_rx_radiotap_header(local, skb, rate, needed_headroom);
276
277 skb_reset_mac_header(skb);
278 skb->ip_summed = CHECKSUM_UNNECESSARY;
279 skb->pkt_type = PACKET_OTHERHOST;
280 skb->protocol = htons(ETH_P_802_2);
281
282 list_for_each_entry_rcu(sdata, &local->interfaces, list) {
283 if (sdata->vif.type != NL80211_IFTYPE_MONITOR)
284 continue;
285
286 if (sdata->u.mntr_flags & MONITOR_FLAG_COOK_FRAMES)
287 continue;
288
289 if (!ieee80211_sdata_running(sdata))
290 continue;
291
292 if (prev_dev) {
293 skb2 = skb_clone(skb, GFP_ATOMIC);
294 if (skb2) {
295 skb2->dev = prev_dev;
296 netif_receive_skb(skb2);
297 }
298 }
299
300 prev_dev = sdata->dev;
301 sdata->dev->stats.rx_packets++;
302 sdata->dev->stats.rx_bytes += skb->len;
303 }
304
305 if (prev_dev) {
306 skb->dev = prev_dev;
307 netif_receive_skb(skb);
308 } else
309 dev_kfree_skb(skb);
310
311 return origskb;
312}
313
314
315static void ieee80211_parse_qos(struct ieee80211_rx_data *rx)
316{
317 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)rx->skb->data;
318 struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(rx->skb);
319 int tid;
320
321
322 if (ieee80211_is_data_qos(hdr->frame_control)) {
323 u8 *qc = ieee80211_get_qos_ctl(hdr);
324
325 tid = *qc & IEEE80211_QOS_CTL_TID_MASK;
326 if (*qc & IEEE80211_QOS_CONTROL_A_MSDU_PRESENT)
327 status->rx_flags |= IEEE80211_RX_AMSDU;
328 } else {
329
330
331
332
333
334
335
336
337
338
339
340 tid = NUM_RX_DATA_QUEUES - 1;
341 }
342
343 rx->queue = tid;
344
345
346 rx->skb->priority = (tid > 7) ? 0 : tid;
347}
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374static void ieee80211_verify_alignment(struct ieee80211_rx_data *rx)
375{
376#ifdef CONFIG_MAC80211_VERBOSE_DEBUG
377 WARN_ONCE((unsigned long)rx->skb->data & 1,
378 "unaligned packet at 0x%p\n", rx->skb->data);
379#endif
380}
381
382
383
384
385static ieee80211_rx_result debug_noinline
386ieee80211_rx_h_passive_scan(struct ieee80211_rx_data *rx)
387{
388 struct ieee80211_local *local = rx->local;
389 struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(rx->skb);
390 struct sk_buff *skb = rx->skb;
391
392 if (likely(!(status->rx_flags & IEEE80211_RX_IN_SCAN)))
393 return RX_CONTINUE;
394
395 if (test_bit(SCAN_HW_SCANNING, &local->scanning))
396 return ieee80211_scan_rx(rx->sdata, skb);
397
398 if (test_bit(SCAN_SW_SCANNING, &local->scanning)) {
399
400 if (ieee80211_scan_rx(rx->sdata, skb) != RX_QUEUED)
401 dev_kfree_skb(skb);
402 return RX_QUEUED;
403 }
404
405
406 I802_DEBUG_INC(local->rx_handlers_drop_passive_scan);
407 return RX_DROP_UNUSABLE;
408}
409
410
411static int ieee80211_is_unicast_robust_mgmt_frame(struct sk_buff *skb)
412{
413 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) skb->data;
414
415 if (skb->len < 24 || is_multicast_ether_addr(hdr->addr1))
416 return 0;
417
418 return ieee80211_is_robust_mgmt_frame(hdr);
419}
420
421
422static int ieee80211_is_multicast_robust_mgmt_frame(struct sk_buff *skb)
423{
424 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) skb->data;
425
426 if (skb->len < 24 || !is_multicast_ether_addr(hdr->addr1))
427 return 0;
428
429 return ieee80211_is_robust_mgmt_frame(hdr);
430}
431
432
433
434static int ieee80211_get_mmie_keyidx(struct sk_buff *skb)
435{
436 struct ieee80211_mgmt *hdr = (struct ieee80211_mgmt *) skb->data;
437 struct ieee80211_mmie *mmie;
438
439 if (skb->len < 24 + sizeof(*mmie) ||
440 !is_multicast_ether_addr(hdr->da))
441 return -1;
442
443 if (!ieee80211_is_robust_mgmt_frame((struct ieee80211_hdr *) hdr))
444 return -1;
445
446 mmie = (struct ieee80211_mmie *)
447 (skb->data + skb->len - sizeof(*mmie));
448 if (mmie->element_id != WLAN_EID_MMIE ||
449 mmie->length != sizeof(*mmie) - 2)
450 return -1;
451
452 return le16_to_cpu(mmie->key_id);
453}
454
455
456static ieee80211_rx_result
457ieee80211_rx_mesh_check(struct ieee80211_rx_data *rx)
458{
459 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)rx->skb->data;
460 unsigned int hdrlen = ieee80211_hdrlen(hdr->frame_control);
461 char *dev_addr = rx->sdata->vif.addr;
462
463 if (ieee80211_is_data(hdr->frame_control)) {
464 if (is_multicast_ether_addr(hdr->addr1)) {
465 if (ieee80211_has_tods(hdr->frame_control) ||
466 !ieee80211_has_fromds(hdr->frame_control))
467 return RX_DROP_MONITOR;
468 if (memcmp(hdr->addr3, dev_addr, ETH_ALEN) == 0)
469 return RX_DROP_MONITOR;
470 } else {
471 if (!ieee80211_has_a4(hdr->frame_control))
472 return RX_DROP_MONITOR;
473 if (memcmp(hdr->addr4, dev_addr, ETH_ALEN) == 0)
474 return RX_DROP_MONITOR;
475 }
476 }
477
478
479
480
481
482 if (!rx->sta || sta_plink_state(rx->sta) != PLINK_ESTAB) {
483 struct ieee80211_mgmt *mgmt;
484
485 if (!ieee80211_is_mgmt(hdr->frame_control))
486 return RX_DROP_MONITOR;
487
488 if (ieee80211_is_action(hdr->frame_control)) {
489 mgmt = (struct ieee80211_mgmt *)hdr;
490 if (mgmt->u.action.category != WLAN_CATEGORY_MESH_PLINK)
491 return RX_DROP_MONITOR;
492 return RX_CONTINUE;
493 }
494
495 if (ieee80211_is_probe_req(hdr->frame_control) ||
496 ieee80211_is_probe_resp(hdr->frame_control) ||
497 ieee80211_is_beacon(hdr->frame_control))
498 return RX_CONTINUE;
499
500 return RX_DROP_MONITOR;
501
502 }
503
504#define msh_h_get(h, l) ((struct ieee80211s_hdr *) ((u8 *)h + l))
505
506 if (ieee80211_is_data(hdr->frame_control) &&
507 is_multicast_ether_addr(hdr->addr1) &&
508 mesh_rmc_check(hdr->addr3, msh_h_get(hdr, hdrlen), rx->sdata))
509 return RX_DROP_MONITOR;
510#undef msh_h_get
511
512 return RX_CONTINUE;
513}
514
515#define SEQ_MODULO 0x1000
516#define SEQ_MASK 0xfff
517
518static inline int seq_less(u16 sq1, u16 sq2)
519{
520 return ((sq1 - sq2) & SEQ_MASK) > (SEQ_MODULO >> 1);
521}
522
523static inline u16 seq_inc(u16 sq)
524{
525 return (sq + 1) & SEQ_MASK;
526}
527
528static inline u16 seq_sub(u16 sq1, u16 sq2)
529{
530 return (sq1 - sq2) & SEQ_MASK;
531}
532
533
534static void ieee80211_release_reorder_frame(struct ieee80211_hw *hw,
535 struct tid_ampdu_rx *tid_agg_rx,
536 int index,
537 struct sk_buff_head *frames)
538{
539 struct sk_buff *skb = tid_agg_rx->reorder_buf[index];
540
541 if (!skb)
542 goto no_frame;
543
544
545 tid_agg_rx->stored_mpdu_num--;
546 tid_agg_rx->reorder_buf[index] = NULL;
547 __skb_queue_tail(frames, skb);
548
549no_frame:
550 tid_agg_rx->head_seq_num = seq_inc(tid_agg_rx->head_seq_num);
551}
552
553static void ieee80211_release_reorder_frames(struct ieee80211_hw *hw,
554 struct tid_ampdu_rx *tid_agg_rx,
555 u16 head_seq_num,
556 struct sk_buff_head *frames)
557{
558 int index;
559
560 while (seq_less(tid_agg_rx->head_seq_num, head_seq_num)) {
561 index = seq_sub(tid_agg_rx->head_seq_num, tid_agg_rx->ssn) %
562 tid_agg_rx->buf_size;
563 ieee80211_release_reorder_frame(hw, tid_agg_rx, index, frames);
564 }
565}
566
567
568
569
570
571
572
573
574
575
576#define HT_RX_REORDER_BUF_TIMEOUT (HZ / 10)
577
578static void ieee80211_sta_reorder_release(struct ieee80211_hw *hw,
579 struct tid_ampdu_rx *tid_agg_rx,
580 struct sk_buff_head *frames)
581{
582 int index, j;
583
584
585 index = seq_sub(tid_agg_rx->head_seq_num, tid_agg_rx->ssn) %
586 tid_agg_rx->buf_size;
587 if (!tid_agg_rx->reorder_buf[index] &&
588 tid_agg_rx->stored_mpdu_num > 1) {
589
590
591
592
593 int skipped = 1;
594 for (j = (index + 1) % tid_agg_rx->buf_size; j != index;
595 j = (j + 1) % tid_agg_rx->buf_size) {
596 if (!tid_agg_rx->reorder_buf[j]) {
597 skipped++;
598 continue;
599 }
600 if (!time_after(jiffies, tid_agg_rx->reorder_time[j] +
601 HT_RX_REORDER_BUF_TIMEOUT))
602 goto set_release_timer;
603
604#ifdef CONFIG_MAC80211_HT_DEBUG
605 if (net_ratelimit())
606 wiphy_debug(hw->wiphy,
607 "release an RX reorder frame due to timeout on earlier frames\n");
608#endif
609 ieee80211_release_reorder_frame(hw, tid_agg_rx,
610 j, frames);
611
612
613
614
615 tid_agg_rx->head_seq_num =
616 (tid_agg_rx->head_seq_num + skipped) & SEQ_MASK;
617 skipped = 0;
618 }
619 } else while (tid_agg_rx->reorder_buf[index]) {
620 ieee80211_release_reorder_frame(hw, tid_agg_rx, index, frames);
621 index = seq_sub(tid_agg_rx->head_seq_num, tid_agg_rx->ssn) %
622 tid_agg_rx->buf_size;
623 }
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665set_release_timer:
666 return;
667}
668
669
670
671
672
673
674static bool ieee80211_sta_manage_reorder_buf(struct ieee80211_hw *hw,
675 struct tid_ampdu_rx *tid_agg_rx,
676 struct sk_buff *skb,
677 struct sk_buff_head *frames)
678{
679 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) skb->data;
680 u16 sc = le16_to_cpu(hdr->seq_ctrl);
681 u16 mpdu_seq_num = (sc & IEEE80211_SCTL_SEQ) >> 4;
682 u16 head_seq_num, buf_size;
683 int index;
684 bool ret = true;
685
686 buf_size = tid_agg_rx->buf_size;
687 head_seq_num = tid_agg_rx->head_seq_num;
688
689 spin_lock(&tid_agg_rx->reorder_lock);
690
691 if (seq_less(mpdu_seq_num, head_seq_num)) {
692 dev_kfree_skb(skb);
693 goto out;
694 }
695
696
697
698
699
700 if (!seq_less(mpdu_seq_num, head_seq_num + buf_size)) {
701 head_seq_num = seq_inc(seq_sub(mpdu_seq_num, buf_size));
702
703 ieee80211_release_reorder_frames(hw, tid_agg_rx, head_seq_num,
704 frames);
705 }
706
707
708
709 index = seq_sub(mpdu_seq_num, tid_agg_rx->ssn) % tid_agg_rx->buf_size;
710
711
712 if (tid_agg_rx->reorder_buf[index]) {
713 dev_kfree_skb(skb);
714 goto out;
715 }
716
717
718
719
720
721 if (mpdu_seq_num == tid_agg_rx->head_seq_num &&
722 tid_agg_rx->stored_mpdu_num == 0) {
723 tid_agg_rx->head_seq_num = seq_inc(tid_agg_rx->head_seq_num);
724 ret = false;
725 goto out;
726 }
727
728
729 tid_agg_rx->reorder_buf[index] = skb;
730 tid_agg_rx->reorder_time[index] = jiffies;
731 tid_agg_rx->stored_mpdu_num++;
732 ieee80211_sta_reorder_release(hw, tid_agg_rx, frames);
733
734 out:
735 spin_unlock(&tid_agg_rx->reorder_lock);
736 return ret;
737}
738
739
740
741
742
743static void ieee80211_rx_reorder_ampdu(struct ieee80211_rx_data *rx,
744 struct sk_buff_head *frames)
745{
746 struct sk_buff *skb = rx->skb;
747 struct ieee80211_local *local = rx->local;
748 struct ieee80211_hw *hw = &local->hw;
749 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) skb->data;
750 struct sta_info *sta = rx->sta;
751 struct tid_ampdu_rx *tid_agg_rx;
752 u16 sc;
753 int tid;
754
755 if (!ieee80211_is_data_qos(hdr->frame_control))
756 goto dont_reorder;
757
758
759
760
761
762
763 if (!sta)
764 goto dont_reorder;
765
766 tid = *ieee80211_get_qos_ctl(hdr) & IEEE80211_QOS_CTL_TID_MASK;
767
768 tid_agg_rx = rcu_dereference(sta->ampdu_mlme.tid_rx[tid]);
769 if (!tid_agg_rx)
770 goto dont_reorder;
771
772
773 if (unlikely(hdr->frame_control & cpu_to_le16(IEEE80211_STYPE_NULLFUNC)))
774 goto dont_reorder;
775
776
777
778
779 if (tid_agg_rx->timeout)
780 mod_timer(&tid_agg_rx->session_timer,
781 TU_TO_EXP_TIME(tid_agg_rx->timeout));
782
783
784 sc = le16_to_cpu(hdr->seq_ctrl);
785 if (sc & IEEE80211_SCTL_FRAG) {
786 skb->pkt_type = IEEE80211_SDATA_QUEUE_TYPE_FRAME;
787 skb_queue_tail(&rx->sdata->skb_queue, skb);
788 ieee80211_queue_work(&local->hw, &rx->sdata->work);
789 return;
790 }
791
792
793
794
795
796
797
798
799 if (ieee80211_sta_manage_reorder_buf(hw, tid_agg_rx, skb, frames))
800 return;
801
802 dont_reorder:
803 __skb_queue_tail(frames, skb);
804}
805
806static ieee80211_rx_result debug_noinline
807ieee80211_rx_h_check(struct ieee80211_rx_data *rx)
808{
809 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)rx->skb->data;
810 struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(rx->skb);
811
812
813 if (rx->sta && !is_multicast_ether_addr(hdr->addr1)) {
814 if (unlikely(ieee80211_has_retry(hdr->frame_control) &&
815 rx->sta->last_seq_ctrl[rx->queue] ==
816 hdr->seq_ctrl)) {
817 if (status->rx_flags & IEEE80211_RX_RA_MATCH) {
818 rx->local->dot11FrameDuplicateCount++;
819 rx->sta->num_duplicates++;
820 }
821 return RX_DROP_MONITOR;
822 } else
823 rx->sta->last_seq_ctrl[rx->queue] = hdr->seq_ctrl;
824 }
825
826 if (unlikely(rx->skb->len < 16)) {
827 I802_DEBUG_INC(rx->local->rx_handlers_drop_short);
828 return RX_DROP_MONITOR;
829 }
830
831
832
833
834
835
836
837
838
839
840 if (ieee80211_vif_is_mesh(&rx->sdata->vif))
841 return ieee80211_rx_mesh_check(rx);
842
843 if (unlikely((ieee80211_is_data(hdr->frame_control) ||
844 ieee80211_is_pspoll(hdr->frame_control)) &&
845 rx->sdata->vif.type != NL80211_IFTYPE_ADHOC &&
846 rx->sdata->vif.type != NL80211_IFTYPE_WDS &&
847 (!rx->sta || !test_sta_flags(rx->sta, WLAN_STA_ASSOC)))) {
848 if ((!ieee80211_has_fromds(hdr->frame_control) &&
849 !ieee80211_has_tods(hdr->frame_control) &&
850 ieee80211_is_data(hdr->frame_control)) ||
851 !(status->rx_flags & IEEE80211_RX_RA_MATCH)) {
852
853
854 return RX_DROP_MONITOR;
855 }
856
857 return RX_DROP_MONITOR;
858 }
859
860 return RX_CONTINUE;
861}
862
863
864static ieee80211_rx_result debug_noinline
865ieee80211_rx_h_decrypt(struct ieee80211_rx_data *rx)
866{
867 struct sk_buff *skb = rx->skb;
868 struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(skb);
869 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
870 int keyidx;
871 int hdrlen;
872 ieee80211_rx_result result = RX_DROP_UNUSABLE;
873 struct ieee80211_key *sta_ptk = NULL;
874 int mmie_keyidx = -1;
875 __le16 fc;
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908 if (!(status->rx_flags & IEEE80211_RX_RA_MATCH))
909 return RX_CONTINUE;
910
911
912 rx->key = NULL;
913
914 if (rx->sta)
915 sta_ptk = rcu_dereference(rx->sta->ptk);
916
917 fc = hdr->frame_control;
918
919 if (!ieee80211_has_protected(fc))
920 mmie_keyidx = ieee80211_get_mmie_keyidx(rx->skb);
921
922 if (!is_multicast_ether_addr(hdr->addr1) && sta_ptk) {
923 rx->key = sta_ptk;
924 if ((status->flag & RX_FLAG_DECRYPTED) &&
925 (status->flag & RX_FLAG_IV_STRIPPED))
926 return RX_CONTINUE;
927
928 if (!ieee80211_has_protected(fc))
929 return RX_CONTINUE;
930 } else if (mmie_keyidx >= 0) {
931
932 if ((status->flag & RX_FLAG_DECRYPTED) &&
933 (status->flag & RX_FLAG_IV_STRIPPED))
934 return RX_CONTINUE;
935
936 if (mmie_keyidx < NUM_DEFAULT_KEYS ||
937 mmie_keyidx >= NUM_DEFAULT_KEYS + NUM_DEFAULT_MGMT_KEYS)
938 return RX_DROP_MONITOR;
939 if (rx->sta)
940 rx->key = rcu_dereference(rx->sta->gtk[mmie_keyidx]);
941 if (!rx->key)
942 rx->key = rcu_dereference(rx->sdata->keys[mmie_keyidx]);
943 } else if (!ieee80211_has_protected(fc)) {
944
945
946
947
948
949
950 struct ieee80211_key *key = NULL;
951 if (ieee80211_is_mgmt(fc) &&
952 is_multicast_ether_addr(hdr->addr1) &&
953 (key = rcu_dereference(rx->sdata->default_mgmt_key)))
954 rx->key = key;
955 else if ((key = rcu_dereference(rx->sdata->default_key)))
956 rx->key = key;
957 return RX_CONTINUE;
958 } else {
959 u8 keyid;
960
961
962
963
964
965
966
967
968
969 if ((status->flag & RX_FLAG_DECRYPTED) &&
970 (status->flag & RX_FLAG_IV_STRIPPED))
971 return RX_CONTINUE;
972
973 hdrlen = ieee80211_hdrlen(fc);
974
975 if (rx->skb->len < 8 + hdrlen)
976 return RX_DROP_UNUSABLE;
977
978
979
980
981
982 skb_copy_bits(rx->skb, hdrlen + 3, &keyid, 1);
983 keyidx = keyid >> 6;
984
985
986 if (is_multicast_ether_addr(hdr->addr1) && rx->sta)
987 rx->key = rcu_dereference(rx->sta->gtk[keyidx]);
988
989
990 if (!rx->key) {
991 rx->key = rcu_dereference(rx->sdata->keys[keyidx]);
992
993
994
995
996
997
998 if (rx->key &&
999 rx->key->conf.cipher != WLAN_CIPHER_SUITE_WEP40 &&
1000 rx->key->conf.cipher != WLAN_CIPHER_SUITE_WEP104 &&
1001 !is_multicast_ether_addr(hdr->addr1))
1002 rx->key = NULL;
1003 }
1004 }
1005
1006 if (rx->key) {
1007 rx->key->tx_rx_count++;
1008
1009 } else {
1010 return RX_DROP_MONITOR;
1011 }
1012
1013 if (skb_linearize(rx->skb))
1014 return RX_DROP_UNUSABLE;
1015
1016
1017 switch (rx->key->conf.cipher) {
1018 case WLAN_CIPHER_SUITE_WEP40:
1019 case WLAN_CIPHER_SUITE_WEP104:
1020
1021 if (rx->sta && ieee80211_is_data(fc) &&
1022 (!(status->flag & RX_FLAG_IV_STRIPPED) ||
1023 !(status->flag & RX_FLAG_DECRYPTED)) &&
1024 ieee80211_wep_is_weak_iv(rx->skb, rx->key))
1025 rx->sta->wep_weak_iv_count++;
1026
1027 result = ieee80211_crypto_wep_decrypt(rx);
1028 break;
1029 case WLAN_CIPHER_SUITE_TKIP:
1030 result = ieee80211_crypto_tkip_decrypt(rx);
1031 break;
1032 case WLAN_CIPHER_SUITE_CCMP:
1033 result = ieee80211_crypto_ccmp_decrypt(rx);
1034 break;
1035 case WLAN_CIPHER_SUITE_AES_CMAC:
1036 result = ieee80211_crypto_aes_cmac_decrypt(rx);
1037 break;
1038 default:
1039
1040
1041
1042
1043 return RX_DROP_UNUSABLE;
1044 }
1045
1046
1047 status->flag |= RX_FLAG_DECRYPTED;
1048
1049 return result;
1050}
1051
1052static ieee80211_rx_result debug_noinline
1053ieee80211_rx_h_check_more_data(struct ieee80211_rx_data *rx)
1054{
1055 struct ieee80211_local *local;
1056 struct ieee80211_hdr *hdr;
1057 struct sk_buff *skb;
1058
1059 local = rx->local;
1060 skb = rx->skb;
1061 hdr = (struct ieee80211_hdr *) skb->data;
1062
1063 if (!local->pspolling)
1064 return RX_CONTINUE;
1065
1066 if (!ieee80211_has_fromds(hdr->frame_control))
1067
1068 return RX_CONTINUE;
1069
1070 if (!ieee80211_is_data(hdr->frame_control))
1071 return RX_CONTINUE;
1072
1073 if (!ieee80211_has_moredata(hdr->frame_control)) {
1074
1075 local->pspolling = false;
1076 return RX_CONTINUE;
1077 }
1078
1079
1080 ieee80211_send_pspoll(local, rx->sdata);
1081
1082 return RX_CONTINUE;
1083}
1084
1085static void ap_sta_ps_start(struct sta_info *sta)
1086{
1087 struct ieee80211_sub_if_data *sdata = sta->sdata;
1088 struct ieee80211_local *local = sdata->local;
1089
1090 atomic_inc(&sdata->bss->num_sta_ps);
1091 set_sta_flags(sta, WLAN_STA_PS_STA);
1092 drv_sta_notify(local, sdata, STA_NOTIFY_SLEEP, &sta->sta);
1093#ifdef CONFIG_MAC80211_VERBOSE_PS_DEBUG
1094 printk(KERN_DEBUG "%s: STA %pM aid %d enters power save mode\n",
1095 sdata->name, sta->sta.addr, sta->sta.aid);
1096#endif
1097}
1098
1099static void ap_sta_ps_end(struct sta_info *sta)
1100{
1101 struct ieee80211_sub_if_data *sdata = sta->sdata;
1102
1103 atomic_dec(&sdata->bss->num_sta_ps);
1104
1105 clear_sta_flags(sta, WLAN_STA_PS_STA);
1106
1107#ifdef CONFIG_MAC80211_VERBOSE_PS_DEBUG
1108 printk(KERN_DEBUG "%s: STA %pM aid %d exits power save mode\n",
1109 sdata->name, sta->sta.addr, sta->sta.aid);
1110#endif
1111
1112 if (test_sta_flags(sta, WLAN_STA_PS_DRIVER)) {
1113#ifdef CONFIG_MAC80211_VERBOSE_PS_DEBUG
1114 printk(KERN_DEBUG "%s: STA %pM aid %d driver-ps-blocked\n",
1115 sdata->name, sta->sta.addr, sta->sta.aid);
1116#endif
1117 return;
1118 }
1119
1120 ieee80211_sta_ps_deliver_wakeup(sta);
1121}
1122
1123static ieee80211_rx_result debug_noinline
1124ieee80211_rx_h_sta_process(struct ieee80211_rx_data *rx)
1125{
1126 struct sta_info *sta = rx->sta;
1127 struct sk_buff *skb = rx->skb;
1128 struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(skb);
1129 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
1130
1131 if (!sta)
1132 return RX_CONTINUE;
1133
1134
1135
1136
1137
1138
1139 if (rx->sdata->vif.type == NL80211_IFTYPE_ADHOC) {
1140 u8 *bssid = ieee80211_get_bssid(hdr, rx->skb->len,
1141 NL80211_IFTYPE_ADHOC);
1142 if (compare_ether_addr(bssid, rx->sdata->u.ibss.bssid) == 0)
1143 sta->last_rx = jiffies;
1144 } else if (!is_multicast_ether_addr(hdr->addr1)) {
1145
1146
1147
1148
1149 sta->last_rx = jiffies;
1150 }
1151
1152 if (!(status->rx_flags & IEEE80211_RX_RA_MATCH))
1153 return RX_CONTINUE;
1154
1155 if (rx->sdata->vif.type == NL80211_IFTYPE_STATION)
1156 ieee80211_sta_rx_notify(rx->sdata, hdr);
1157
1158 sta->rx_fragments++;
1159 sta->rx_bytes += rx->skb->len;
1160 sta->last_signal = status->signal;
1161
1162
1163
1164
1165
1166 if (!ieee80211_has_morefrags(hdr->frame_control) &&
1167 (rx->sdata->vif.type == NL80211_IFTYPE_AP ||
1168 rx->sdata->vif.type == NL80211_IFTYPE_AP_VLAN)) {
1169 if (test_sta_flags(sta, WLAN_STA_PS_STA)) {
1170
1171
1172
1173
1174
1175
1176
1177
1178 if (ieee80211_is_data(hdr->frame_control) &&
1179 !ieee80211_has_pm(hdr->frame_control))
1180 ap_sta_ps_end(sta);
1181 } else {
1182 if (ieee80211_has_pm(hdr->frame_control))
1183 ap_sta_ps_start(sta);
1184 }
1185 }
1186
1187
1188
1189
1190
1191 if (ieee80211_is_nullfunc(hdr->frame_control) ||
1192 ieee80211_is_qos_nullfunc(hdr->frame_control)) {
1193 I802_DEBUG_INC(rx->local->rx_handlers_drop_nullfunc);
1194
1195
1196
1197
1198
1199
1200
1201 if (ieee80211_has_a4(hdr->frame_control) &&
1202 (rx->sdata->vif.type == NL80211_IFTYPE_AP ||
1203 (rx->sdata->vif.type == NL80211_IFTYPE_AP_VLAN &&
1204 !rx->sdata->u.vlan.sta)))
1205 return RX_DROP_MONITOR;
1206
1207
1208
1209
1210 sta->rx_packets++;
1211 dev_kfree_skb(rx->skb);
1212 return RX_QUEUED;
1213 }
1214
1215 return RX_CONTINUE;
1216}
1217
1218static inline struct ieee80211_fragment_entry *
1219ieee80211_reassemble_add(struct ieee80211_sub_if_data *sdata,
1220 unsigned int frag, unsigned int seq, int rx_queue,
1221 struct sk_buff **skb)
1222{
1223 struct ieee80211_fragment_entry *entry;
1224 int idx;
1225
1226 idx = sdata->fragment_next;
1227 entry = &sdata->fragments[sdata->fragment_next++];
1228 if (sdata->fragment_next >= IEEE80211_FRAGMENT_MAX)
1229 sdata->fragment_next = 0;
1230
1231 if (!skb_queue_empty(&entry->skb_list)) {
1232#ifdef CONFIG_MAC80211_VERBOSE_DEBUG
1233 struct ieee80211_hdr *hdr =
1234 (struct ieee80211_hdr *) entry->skb_list.next->data;
1235 printk(KERN_DEBUG "%s: RX reassembly removed oldest "
1236 "fragment entry (idx=%d age=%lu seq=%d last_frag=%d "
1237 "addr1=%pM addr2=%pM\n",
1238 sdata->name, idx,
1239 jiffies - entry->first_frag_time, entry->seq,
1240 entry->last_frag, hdr->addr1, hdr->addr2);
1241#endif
1242 __skb_queue_purge(&entry->skb_list);
1243 }
1244
1245 __skb_queue_tail(&entry->skb_list, *skb);
1246 *skb = NULL;
1247 entry->first_frag_time = jiffies;
1248 entry->seq = seq;
1249 entry->rx_queue = rx_queue;
1250 entry->last_frag = frag;
1251 entry->ccmp = 0;
1252 entry->extra_len = 0;
1253
1254 return entry;
1255}
1256
1257static inline struct ieee80211_fragment_entry *
1258ieee80211_reassemble_find(struct ieee80211_sub_if_data *sdata,
1259 unsigned int frag, unsigned int seq,
1260 int rx_queue, struct ieee80211_hdr *hdr)
1261{
1262 struct ieee80211_fragment_entry *entry;
1263 int i, idx;
1264
1265 idx = sdata->fragment_next;
1266 for (i = 0; i < IEEE80211_FRAGMENT_MAX; i++) {
1267 struct ieee80211_hdr *f_hdr;
1268
1269 idx--;
1270 if (idx < 0)
1271 idx = IEEE80211_FRAGMENT_MAX - 1;
1272
1273 entry = &sdata->fragments[idx];
1274 if (skb_queue_empty(&entry->skb_list) || entry->seq != seq ||
1275 entry->rx_queue != rx_queue ||
1276 entry->last_frag + 1 != frag)
1277 continue;
1278
1279 f_hdr = (struct ieee80211_hdr *)entry->skb_list.next->data;
1280
1281
1282
1283
1284 if (((hdr->frame_control ^ f_hdr->frame_control) &
1285 cpu_to_le16(IEEE80211_FCTL_FTYPE)) ||
1286 compare_ether_addr(hdr->addr1, f_hdr->addr1) != 0 ||
1287 compare_ether_addr(hdr->addr2, f_hdr->addr2) != 0)
1288 continue;
1289
1290 if (time_after(jiffies, entry->first_frag_time + 2 * HZ)) {
1291 __skb_queue_purge(&entry->skb_list);
1292 continue;
1293 }
1294 return entry;
1295 }
1296
1297 return NULL;
1298}
1299
1300static ieee80211_rx_result debug_noinline
1301ieee80211_rx_h_defragment(struct ieee80211_rx_data *rx)
1302{
1303 struct ieee80211_hdr *hdr;
1304 u16 sc;
1305 __le16 fc;
1306 unsigned int frag, seq;
1307 struct ieee80211_fragment_entry *entry;
1308 struct sk_buff *skb;
1309 struct ieee80211_rx_status *status;
1310
1311 hdr = (struct ieee80211_hdr *)rx->skb->data;
1312 fc = hdr->frame_control;
1313 sc = le16_to_cpu(hdr->seq_ctrl);
1314 frag = sc & IEEE80211_SCTL_FRAG;
1315
1316 if (likely((!ieee80211_has_morefrags(fc) && frag == 0) ||
1317 (rx->skb)->len < 24 ||
1318 is_multicast_ether_addr(hdr->addr1))) {
1319
1320 goto out;
1321 }
1322 I802_DEBUG_INC(rx->local->rx_handlers_fragments);
1323
1324 if (skb_linearize(rx->skb))
1325 return RX_DROP_UNUSABLE;
1326
1327
1328
1329
1330
1331
1332 hdr = (struct ieee80211_hdr *)rx->skb->data;
1333 seq = (sc & IEEE80211_SCTL_SEQ) >> 4;
1334
1335 if (frag == 0) {
1336
1337 entry = ieee80211_reassemble_add(rx->sdata, frag, seq,
1338 rx->queue, &(rx->skb));
1339 if (rx->key && rx->key->conf.cipher == WLAN_CIPHER_SUITE_CCMP &&
1340 ieee80211_has_protected(fc)) {
1341 int queue = ieee80211_is_mgmt(fc) ?
1342 NUM_RX_DATA_QUEUES : rx->queue;
1343
1344
1345 entry->ccmp = 1;
1346 memcpy(entry->last_pn,
1347 rx->key->u.ccmp.rx_pn[queue],
1348 CCMP_PN_LEN);
1349 }
1350 return RX_QUEUED;
1351 }
1352
1353
1354
1355
1356 entry = ieee80211_reassemble_find(rx->sdata, frag, seq, rx->queue, hdr);
1357 if (!entry) {
1358 I802_DEBUG_INC(rx->local->rx_handlers_drop_defrag);
1359 return RX_DROP_MONITOR;
1360 }
1361
1362
1363
1364 if (entry->ccmp) {
1365 int i;
1366 u8 pn[CCMP_PN_LEN], *rpn;
1367 int queue;
1368 if (!rx->key || rx->key->conf.cipher != WLAN_CIPHER_SUITE_CCMP)
1369 return RX_DROP_UNUSABLE;
1370 memcpy(pn, entry->last_pn, CCMP_PN_LEN);
1371 for (i = CCMP_PN_LEN - 1; i >= 0; i--) {
1372 pn[i]++;
1373 if (pn[i])
1374 break;
1375 }
1376 queue = ieee80211_is_mgmt(fc) ?
1377 NUM_RX_DATA_QUEUES : rx->queue;
1378 rpn = rx->key->u.ccmp.rx_pn[queue];
1379 if (memcmp(pn, rpn, CCMP_PN_LEN))
1380 return RX_DROP_UNUSABLE;
1381 memcpy(entry->last_pn, pn, CCMP_PN_LEN);
1382 }
1383
1384 skb_pull(rx->skb, ieee80211_hdrlen(fc));
1385 __skb_queue_tail(&entry->skb_list, rx->skb);
1386 entry->last_frag = frag;
1387 entry->extra_len += rx->skb->len;
1388 if (ieee80211_has_morefrags(fc)) {
1389 rx->skb = NULL;
1390 return RX_QUEUED;
1391 }
1392
1393 rx->skb = __skb_dequeue(&entry->skb_list);
1394 if (skb_tailroom(rx->skb) < entry->extra_len) {
1395 I802_DEBUG_INC(rx->local->rx_expand_skb_head2);
1396 if (unlikely(pskb_expand_head(rx->skb, 0, entry->extra_len,
1397 GFP_ATOMIC))) {
1398 I802_DEBUG_INC(rx->local->rx_handlers_drop_defrag);
1399 __skb_queue_purge(&entry->skb_list);
1400 return RX_DROP_UNUSABLE;
1401 }
1402 }
1403 while ((skb = __skb_dequeue(&entry->skb_list))) {
1404 memcpy(skb_put(rx->skb, skb->len), skb->data, skb->len);
1405 dev_kfree_skb(skb);
1406 }
1407
1408
1409 status = IEEE80211_SKB_RXCB(rx->skb);
1410 status->rx_flags |= IEEE80211_RX_FRAGMENTED;
1411
1412 out:
1413 if (rx->sta)
1414 rx->sta->rx_packets++;
1415 if (is_multicast_ether_addr(hdr->addr1))
1416 rx->local->dot11MulticastReceivedFrameCount++;
1417 else
1418 ieee80211_led_rx(rx->local);
1419 return RX_CONTINUE;
1420}
1421
1422static ieee80211_rx_result debug_noinline
1423ieee80211_rx_h_ps_poll(struct ieee80211_rx_data *rx)
1424{
1425 struct ieee80211_sub_if_data *sdata = rx->sdata;
1426 __le16 fc = ((struct ieee80211_hdr *)rx->skb->data)->frame_control;
1427 struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(rx->skb);
1428
1429 if (likely(!rx->sta || !ieee80211_is_pspoll(fc) ||
1430 !(status->rx_flags & IEEE80211_RX_RA_MATCH)))
1431 return RX_CONTINUE;
1432
1433 if ((sdata->vif.type != NL80211_IFTYPE_AP) &&
1434 (sdata->vif.type != NL80211_IFTYPE_AP_VLAN))
1435 return RX_DROP_UNUSABLE;
1436
1437 if (!test_sta_flags(rx->sta, WLAN_STA_PS_DRIVER))
1438 ieee80211_sta_ps_deliver_poll_response(rx->sta);
1439 else
1440 set_sta_flags(rx->sta, WLAN_STA_PSPOLL);
1441
1442
1443
1444 dev_kfree_skb(rx->skb);
1445
1446 return RX_QUEUED;
1447}
1448
1449static ieee80211_rx_result debug_noinline
1450ieee80211_rx_h_remove_qos_control(struct ieee80211_rx_data *rx)
1451{
1452 u8 *data = rx->skb->data;
1453 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)data;
1454
1455 if (!ieee80211_is_data_qos(hdr->frame_control))
1456 return RX_CONTINUE;
1457
1458
1459 memmove(data + IEEE80211_QOS_CTL_LEN, data,
1460 ieee80211_hdrlen(hdr->frame_control) - IEEE80211_QOS_CTL_LEN);
1461 hdr = (struct ieee80211_hdr *)skb_pull(rx->skb, IEEE80211_QOS_CTL_LEN);
1462
1463 hdr->frame_control &= ~cpu_to_le16(IEEE80211_STYPE_QOS_DATA);
1464
1465 return RX_CONTINUE;
1466}
1467
1468static int
1469ieee80211_802_1x_port_control(struct ieee80211_rx_data *rx)
1470{
1471 if (unlikely(!rx->sta ||
1472 !test_sta_flags(rx->sta, WLAN_STA_AUTHORIZED)))
1473 return -EACCES;
1474
1475 return 0;
1476}
1477
1478static int
1479ieee80211_drop_unencrypted(struct ieee80211_rx_data *rx, __le16 fc)
1480{
1481 struct sk_buff *skb = rx->skb;
1482 struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(skb);
1483
1484
1485
1486
1487
1488 if (status->flag & RX_FLAG_DECRYPTED)
1489 return 0;
1490
1491
1492 if (unlikely(!ieee80211_has_protected(fc) &&
1493 !ieee80211_is_nullfunc(fc) &&
1494 ieee80211_is_data(fc) &&
1495 (rx->key || rx->sdata->drop_unencrypted)))
1496 return -EACCES;
1497
1498 return 0;
1499}
1500
1501static int
1502ieee80211_drop_unencrypted_mgmt(struct ieee80211_rx_data *rx)
1503{
1504 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)rx->skb->data;
1505 struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(rx->skb);
1506 __le16 fc = hdr->frame_control;
1507
1508
1509
1510
1511
1512 if (status->flag & RX_FLAG_DECRYPTED)
1513 return 0;
1514
1515 if (rx->sta && test_sta_flags(rx->sta, WLAN_STA_MFP)) {
1516 if (unlikely(!ieee80211_has_protected(fc) &&
1517 ieee80211_is_unicast_robust_mgmt_frame(rx->skb) &&
1518 rx->key))
1519 return -EACCES;
1520
1521 if (unlikely(ieee80211_is_multicast_robust_mgmt_frame(rx->skb) &&
1522 ieee80211_get_mmie_keyidx(rx->skb) < 0))
1523 return -EACCES;
1524
1525
1526
1527
1528 if (unlikely(ieee80211_is_action(fc) && !rx->key &&
1529 ieee80211_is_robust_mgmt_frame(
1530 (struct ieee80211_hdr *) rx->skb->data)))
1531 return -EACCES;
1532 }
1533
1534 return 0;
1535}
1536
1537static int
1538__ieee80211_data_to_8023(struct ieee80211_rx_data *rx)
1539{
1540 struct ieee80211_sub_if_data *sdata = rx->sdata;
1541 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)rx->skb->data;
1542
1543 if (ieee80211_has_a4(hdr->frame_control) &&
1544 sdata->vif.type == NL80211_IFTYPE_AP_VLAN && !sdata->u.vlan.sta)
1545 return -1;
1546
1547 if (is_multicast_ether_addr(hdr->addr1) &&
1548 ((sdata->vif.type == NL80211_IFTYPE_AP_VLAN && sdata->u.vlan.sta) ||
1549 (sdata->vif.type == NL80211_IFTYPE_STATION && sdata->u.mgd.use_4addr)))
1550 return -1;
1551
1552 return ieee80211_data_to_8023(rx->skb, sdata->vif.addr, sdata->vif.type);
1553}
1554
1555
1556
1557
1558static bool ieee80211_frame_allowed(struct ieee80211_rx_data *rx, __le16 fc)
1559{
1560 static const u8 pae_group_addr[ETH_ALEN] __aligned(2)
1561 = { 0x01, 0x80, 0xC2, 0x00, 0x00, 0x03 };
1562 struct ethhdr *ehdr = (struct ethhdr *) rx->skb->data;
1563
1564
1565
1566
1567
1568 if (ehdr->h_proto == rx->sdata->control_port_protocol &&
1569 (compare_ether_addr(ehdr->h_dest, rx->sdata->vif.addr) == 0 ||
1570 compare_ether_addr(ehdr->h_dest, pae_group_addr) == 0))
1571 return true;
1572
1573 if (ieee80211_802_1x_port_control(rx) ||
1574 ieee80211_drop_unencrypted(rx, fc))
1575 return false;
1576
1577 return true;
1578}
1579
1580
1581
1582
1583static void
1584ieee80211_deliver_skb(struct ieee80211_rx_data *rx)
1585{
1586 struct ieee80211_sub_if_data *sdata = rx->sdata;
1587 struct net_device *dev = sdata->dev;
1588 struct sk_buff *skb, *xmit_skb;
1589 struct ethhdr *ehdr = (struct ethhdr *) rx->skb->data;
1590 struct sta_info *dsta;
1591 struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(rx->skb);
1592
1593 skb = rx->skb;
1594 xmit_skb = NULL;
1595
1596 if ((sdata->vif.type == NL80211_IFTYPE_AP ||
1597 sdata->vif.type == NL80211_IFTYPE_AP_VLAN) &&
1598 !(sdata->flags & IEEE80211_SDATA_DONT_BRIDGE_PACKETS) &&
1599 (status->rx_flags & IEEE80211_RX_RA_MATCH) &&
1600 (sdata->vif.type != NL80211_IFTYPE_AP_VLAN || !sdata->u.vlan.sta)) {
1601 if (is_multicast_ether_addr(ehdr->h_dest)) {
1602
1603
1604
1605
1606 xmit_skb = skb_copy(skb, GFP_ATOMIC);
1607 if (!xmit_skb && net_ratelimit())
1608 printk(KERN_DEBUG "%s: failed to clone "
1609 "multicast frame\n", dev->name);
1610 } else {
1611 dsta = sta_info_get(sdata, skb->data);
1612 if (dsta) {
1613
1614
1615
1616
1617
1618
1619 xmit_skb = skb;
1620 skb = NULL;
1621 }
1622 }
1623 }
1624
1625 if (skb) {
1626 int align __maybe_unused;
1627
1628#ifndef CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS
1629
1630
1631
1632
1633
1634
1635
1636 align = ((unsigned long)(skb->data + sizeof(struct ethhdr))) & 3;
1637 if (align) {
1638 if (WARN_ON(skb_headroom(skb) < 3)) {
1639 dev_kfree_skb(skb);
1640 skb = NULL;
1641 } else {
1642 u8 *data = skb->data;
1643 size_t len = skb_headlen(skb);
1644 skb->data -= align;
1645 memmove(skb->data, data, len);
1646 skb_set_tail_pointer(skb, len);
1647 }
1648 }
1649#endif
1650
1651 if (skb) {
1652
1653 skb->protocol = eth_type_trans(skb, dev);
1654 memset(skb->cb, 0, sizeof(skb->cb));
1655 netif_receive_skb(skb);
1656 }
1657 }
1658
1659 if (xmit_skb) {
1660
1661 xmit_skb->protocol = htons(ETH_P_802_3);
1662 skb_reset_network_header(xmit_skb);
1663 skb_reset_mac_header(xmit_skb);
1664 dev_queue_xmit(xmit_skb);
1665 }
1666}
1667
1668static ieee80211_rx_result debug_noinline
1669ieee80211_rx_h_amsdu(struct ieee80211_rx_data *rx)
1670{
1671 struct net_device *dev = rx->sdata->dev;
1672 struct sk_buff *skb = rx->skb;
1673 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
1674 __le16 fc = hdr->frame_control;
1675 struct sk_buff_head frame_list;
1676 struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(rx->skb);
1677
1678 if (unlikely(!ieee80211_is_data(fc)))
1679 return RX_CONTINUE;
1680
1681 if (unlikely(!ieee80211_is_data_present(fc)))
1682 return RX_DROP_MONITOR;
1683
1684 if (!(status->rx_flags & IEEE80211_RX_AMSDU))
1685 return RX_CONTINUE;
1686
1687 if (ieee80211_has_a4(hdr->frame_control) &&
1688 rx->sdata->vif.type == NL80211_IFTYPE_AP_VLAN &&
1689 !rx->sdata->u.vlan.sta)
1690 return RX_DROP_UNUSABLE;
1691
1692 if (is_multicast_ether_addr(hdr->addr1) &&
1693 ((rx->sdata->vif.type == NL80211_IFTYPE_AP_VLAN &&
1694 rx->sdata->u.vlan.sta) ||
1695 (rx->sdata->vif.type == NL80211_IFTYPE_STATION &&
1696 rx->sdata->u.mgd.use_4addr)))
1697 return RX_DROP_UNUSABLE;
1698
1699 skb->dev = dev;
1700 __skb_queue_head_init(&frame_list);
1701
1702 if (skb_linearize(skb))
1703 return RX_DROP_UNUSABLE;
1704
1705 ieee80211_amsdu_to_8023s(skb, &frame_list, dev->dev_addr,
1706 rx->sdata->vif.type,
1707 rx->local->hw.extra_tx_headroom);
1708
1709 while (!skb_queue_empty(&frame_list)) {
1710 rx->skb = __skb_dequeue(&frame_list);
1711
1712 if (!ieee80211_frame_allowed(rx, fc)) {
1713 dev_kfree_skb(rx->skb);
1714 continue;
1715 }
1716 dev->stats.rx_packets++;
1717 dev->stats.rx_bytes += rx->skb->len;
1718
1719 ieee80211_deliver_skb(rx);
1720 }
1721
1722 return RX_QUEUED;
1723}
1724
1725#ifdef CONFIG_MAC80211_MESH
1726static ieee80211_rx_result
1727ieee80211_rx_h_mesh_fwding(struct ieee80211_rx_data *rx)
1728{
1729 struct ieee80211_hdr *hdr;
1730 struct ieee80211s_hdr *mesh_hdr;
1731 unsigned int hdrlen;
1732 struct sk_buff *skb = rx->skb, *fwd_skb;
1733 struct ieee80211_local *local = rx->local;
1734 struct ieee80211_sub_if_data *sdata = rx->sdata;
1735 struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(skb);
1736
1737 hdr = (struct ieee80211_hdr *) skb->data;
1738 hdrlen = ieee80211_hdrlen(hdr->frame_control);
1739 mesh_hdr = (struct ieee80211s_hdr *) (skb->data + hdrlen);
1740
1741 if (!ieee80211_is_data(hdr->frame_control))
1742 return RX_CONTINUE;
1743
1744 if (!mesh_hdr->ttl)
1745
1746 return RX_DROP_MONITOR;
1747
1748 if (mesh_hdr->flags & MESH_FLAGS_AE) {
1749 struct mesh_path *mppath;
1750 char *proxied_addr;
1751 char *mpp_addr;
1752
1753 if (is_multicast_ether_addr(hdr->addr1)) {
1754 mpp_addr = hdr->addr3;
1755 proxied_addr = mesh_hdr->eaddr1;
1756 } else {
1757 mpp_addr = hdr->addr4;
1758 proxied_addr = mesh_hdr->eaddr2;
1759 }
1760
1761 rcu_read_lock();
1762 mppath = mpp_path_lookup(proxied_addr, sdata);
1763 if (!mppath) {
1764 mpp_path_add(proxied_addr, mpp_addr, sdata);
1765 } else {
1766 spin_lock_bh(&mppath->state_lock);
1767 if (compare_ether_addr(mppath->mpp, mpp_addr) != 0)
1768 memcpy(mppath->mpp, mpp_addr, ETH_ALEN);
1769 spin_unlock_bh(&mppath->state_lock);
1770 }
1771 rcu_read_unlock();
1772 }
1773
1774
1775 if (!is_multicast_ether_addr(hdr->addr1) &&
1776 compare_ether_addr(sdata->vif.addr, hdr->addr3) == 0)
1777 return RX_CONTINUE;
1778
1779 mesh_hdr->ttl--;
1780
1781 if (status->rx_flags & IEEE80211_RX_RA_MATCH) {
1782 if (!mesh_hdr->ttl)
1783 IEEE80211_IFSTA_MESH_CTR_INC(&rx->sdata->u.mesh,
1784 dropped_frames_ttl);
1785 else {
1786 struct ieee80211_hdr *fwd_hdr;
1787 struct ieee80211_tx_info *info;
1788
1789 fwd_skb = skb_copy(skb, GFP_ATOMIC);
1790
1791 if (!fwd_skb && net_ratelimit())
1792 printk(KERN_DEBUG "%s: failed to clone mesh frame\n",
1793 sdata->name);
1794 if (!fwd_skb)
1795 goto out;
1796
1797 fwd_hdr = (struct ieee80211_hdr *) fwd_skb->data;
1798 memcpy(fwd_hdr->addr2, sdata->vif.addr, ETH_ALEN);
1799 info = IEEE80211_SKB_CB(fwd_skb);
1800 memset(info, 0, sizeof(*info));
1801 info->flags |= IEEE80211_TX_INTFL_NEED_TXPROCESSING;
1802 info->control.vif = &rx->sdata->vif;
1803 skb_set_queue_mapping(skb,
1804 ieee80211_select_queue(rx->sdata, fwd_skb));
1805 ieee80211_set_qos_hdr(local, skb);
1806 if (is_multicast_ether_addr(fwd_hdr->addr1))
1807 IEEE80211_IFSTA_MESH_CTR_INC(&sdata->u.mesh,
1808 fwded_mcast);
1809 else {
1810 int err;
1811
1812
1813
1814
1815 memcpy(fwd_hdr->addr1, fwd_hdr->addr2,
1816 ETH_ALEN);
1817 err = mesh_nexthop_lookup(fwd_skb, sdata);
1818
1819
1820
1821 if (err)
1822 return RX_DROP_MONITOR;
1823
1824 IEEE80211_IFSTA_MESH_CTR_INC(&sdata->u.mesh,
1825 fwded_unicast);
1826 }
1827 IEEE80211_IFSTA_MESH_CTR_INC(&sdata->u.mesh,
1828 fwded_frames);
1829 ieee80211_add_pending_skb(local, fwd_skb);
1830 }
1831 }
1832
1833 out:
1834 if (is_multicast_ether_addr(hdr->addr1) ||
1835 sdata->dev->flags & IFF_PROMISC)
1836 return RX_CONTINUE;
1837 else
1838 return RX_DROP_MONITOR;
1839}
1840#endif
1841
1842static ieee80211_rx_result debug_noinline
1843ieee80211_rx_h_data(struct ieee80211_rx_data *rx)
1844{
1845 struct ieee80211_sub_if_data *sdata = rx->sdata;
1846 struct ieee80211_local *local = rx->local;
1847 struct net_device *dev = sdata->dev;
1848 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)rx->skb->data;
1849 __le16 fc = hdr->frame_control;
1850 int err;
1851
1852 if (unlikely(!ieee80211_is_data(hdr->frame_control)))
1853 return RX_CONTINUE;
1854
1855 if (unlikely(!ieee80211_is_data_present(hdr->frame_control)))
1856 return RX_DROP_MONITOR;
1857
1858
1859
1860
1861
1862 if (ieee80211_has_a4(hdr->frame_control) &&
1863 sdata->vif.type == NL80211_IFTYPE_AP)
1864 return RX_DROP_MONITOR;
1865
1866 err = __ieee80211_data_to_8023(rx);
1867 if (unlikely(err))
1868 return RX_DROP_UNUSABLE;
1869
1870 if (!ieee80211_frame_allowed(rx, fc))
1871 return RX_DROP_MONITOR;
1872
1873 rx->skb->dev = dev;
1874
1875 dev->stats.rx_packets++;
1876 dev->stats.rx_bytes += rx->skb->len;
1877
1878 if (ieee80211_is_data(hdr->frame_control) &&
1879 !is_multicast_ether_addr(hdr->addr1) &&
1880 local->hw.conf.dynamic_ps_timeout > 0 && local->ps_sdata) {
1881 mod_timer(&local->dynamic_ps_timer, jiffies +
1882 msecs_to_jiffies(local->hw.conf.dynamic_ps_timeout));
1883 }
1884
1885 ieee80211_deliver_skb(rx);
1886
1887 return RX_QUEUED;
1888}
1889
1890static ieee80211_rx_result debug_noinline
1891ieee80211_rx_h_ctrl(struct ieee80211_rx_data *rx, struct sk_buff_head *frames)
1892{
1893 struct ieee80211_local *local = rx->local;
1894 struct ieee80211_hw *hw = &local->hw;
1895 struct sk_buff *skb = rx->skb;
1896 struct ieee80211_bar *bar = (struct ieee80211_bar *)skb->data;
1897 struct tid_ampdu_rx *tid_agg_rx;
1898 u16 start_seq_num;
1899 u16 tid;
1900
1901 if (likely(!ieee80211_is_ctl(bar->frame_control)))
1902 return RX_CONTINUE;
1903
1904 if (ieee80211_is_back_req(bar->frame_control)) {
1905 struct {
1906 __le16 control, start_seq_num;
1907 } __packed bar_data;
1908
1909 if (!rx->sta)
1910 return RX_DROP_MONITOR;
1911
1912 if (skb_copy_bits(skb, offsetof(struct ieee80211_bar, control),
1913 &bar_data, sizeof(bar_data)))
1914 return RX_DROP_MONITOR;
1915
1916 tid = le16_to_cpu(bar_data.control) >> 12;
1917
1918 tid_agg_rx = rcu_dereference(rx->sta->ampdu_mlme.tid_rx[tid]);
1919 if (!tid_agg_rx)
1920 return RX_DROP_MONITOR;
1921
1922 start_seq_num = le16_to_cpu(bar_data.start_seq_num) >> 4;
1923
1924
1925 if (tid_agg_rx->timeout)
1926 mod_timer(&tid_agg_rx->session_timer,
1927 TU_TO_EXP_TIME(tid_agg_rx->timeout));
1928
1929
1930 ieee80211_release_reorder_frames(hw, tid_agg_rx, start_seq_num,
1931 frames);
1932 kfree_skb(skb);
1933 return RX_QUEUED;
1934 }
1935
1936
1937
1938
1939
1940
1941 return RX_DROP_MONITOR;
1942}
1943
1944static void ieee80211_process_sa_query_req(struct ieee80211_sub_if_data *sdata,
1945 struct ieee80211_mgmt *mgmt,
1946 size_t len)
1947{
1948 struct ieee80211_local *local = sdata->local;
1949 struct sk_buff *skb;
1950 struct ieee80211_mgmt *resp;
1951
1952 if (compare_ether_addr(mgmt->da, sdata->vif.addr) != 0) {
1953
1954 return;
1955 }
1956
1957 if (compare_ether_addr(mgmt->sa, sdata->u.mgd.bssid) != 0 ||
1958 compare_ether_addr(mgmt->bssid, sdata->u.mgd.bssid) != 0) {
1959
1960 return;
1961 }
1962
1963 if (len < 24 + 1 + sizeof(resp->u.action.u.sa_query)) {
1964
1965 return;
1966 }
1967
1968 skb = dev_alloc_skb(sizeof(*resp) + local->hw.extra_tx_headroom);
1969 if (skb == NULL)
1970 return;
1971
1972 skb_reserve(skb, local->hw.extra_tx_headroom);
1973 resp = (struct ieee80211_mgmt *) skb_put(skb, 24);
1974 memset(resp, 0, 24);
1975 memcpy(resp->da, mgmt->sa, ETH_ALEN);
1976 memcpy(resp->sa, sdata->vif.addr, ETH_ALEN);
1977 memcpy(resp->bssid, sdata->u.mgd.bssid, ETH_ALEN);
1978 resp->frame_control = cpu_to_le16(IEEE80211_FTYPE_MGMT |
1979 IEEE80211_STYPE_ACTION);
1980 skb_put(skb, 1 + sizeof(resp->u.action.u.sa_query));
1981 resp->u.action.category = WLAN_CATEGORY_SA_QUERY;
1982 resp->u.action.u.sa_query.action = WLAN_ACTION_SA_QUERY_RESPONSE;
1983 memcpy(resp->u.action.u.sa_query.trans_id,
1984 mgmt->u.action.u.sa_query.trans_id,
1985 WLAN_SA_QUERY_TR_ID_LEN);
1986
1987 ieee80211_tx_skb(sdata, skb);
1988}
1989
1990static ieee80211_rx_result debug_noinline
1991ieee80211_rx_h_mgmt_check(struct ieee80211_rx_data *rx)
1992{
1993 struct ieee80211_mgmt *mgmt = (struct ieee80211_mgmt *) rx->skb->data;
1994 struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(rx->skb);
1995
1996
1997
1998
1999
2000
2001 if (rx->skb->len < 24)
2002 return RX_DROP_MONITOR;
2003
2004 if (!ieee80211_is_mgmt(mgmt->frame_control))
2005 return RX_DROP_MONITOR;
2006
2007 if (!(status->rx_flags & IEEE80211_RX_RA_MATCH))
2008 return RX_DROP_MONITOR;
2009
2010 if (ieee80211_drop_unencrypted_mgmt(rx))
2011 return RX_DROP_UNUSABLE;
2012
2013 return RX_CONTINUE;
2014}
2015
2016static ieee80211_rx_result debug_noinline
2017ieee80211_rx_h_action(struct ieee80211_rx_data *rx)
2018{
2019 struct ieee80211_local *local = rx->local;
2020 struct ieee80211_sub_if_data *sdata = rx->sdata;
2021 struct ieee80211_mgmt *mgmt = (struct ieee80211_mgmt *) rx->skb->data;
2022 struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(rx->skb);
2023 int len = rx->skb->len;
2024
2025 if (!ieee80211_is_action(mgmt->frame_control))
2026 return RX_CONTINUE;
2027
2028
2029 if (len < IEEE80211_MIN_ACTION_SIZE)
2030 return RX_DROP_UNUSABLE;
2031
2032 if (!rx->sta && mgmt->u.action.category != WLAN_CATEGORY_PUBLIC)
2033 return RX_DROP_UNUSABLE;
2034
2035 if (!(status->rx_flags & IEEE80211_RX_RA_MATCH))
2036 return RX_DROP_UNUSABLE;
2037
2038 switch (mgmt->u.action.category) {
2039 case WLAN_CATEGORY_BACK:
2040
2041
2042
2043
2044
2045
2046 if (sdata->vif.type != NL80211_IFTYPE_STATION &&
2047 sdata->vif.type != NL80211_IFTYPE_AP_VLAN &&
2048 sdata->vif.type != NL80211_IFTYPE_AP)
2049 break;
2050
2051
2052 if (len < IEEE80211_MIN_ACTION_SIZE + 1)
2053 break;
2054
2055 switch (mgmt->u.action.u.addba_req.action_code) {
2056 case WLAN_ACTION_ADDBA_REQ:
2057 if (len < (IEEE80211_MIN_ACTION_SIZE +
2058 sizeof(mgmt->u.action.u.addba_req)))
2059 goto invalid;
2060 break;
2061 case WLAN_ACTION_ADDBA_RESP:
2062 if (len < (IEEE80211_MIN_ACTION_SIZE +
2063 sizeof(mgmt->u.action.u.addba_resp)))
2064 goto invalid;
2065 break;
2066 case WLAN_ACTION_DELBA:
2067 if (len < (IEEE80211_MIN_ACTION_SIZE +
2068 sizeof(mgmt->u.action.u.delba)))
2069 goto invalid;
2070 break;
2071 default:
2072 goto invalid;
2073 }
2074
2075 goto queue;
2076 case WLAN_CATEGORY_SPECTRUM_MGMT:
2077 if (local->hw.conf.channel->band != IEEE80211_BAND_5GHZ)
2078 break;
2079
2080 if (sdata->vif.type != NL80211_IFTYPE_STATION)
2081 break;
2082
2083
2084 if (len < IEEE80211_MIN_ACTION_SIZE + 1)
2085 break;
2086
2087 switch (mgmt->u.action.u.measurement.action_code) {
2088 case WLAN_ACTION_SPCT_MSR_REQ:
2089 if (len < (IEEE80211_MIN_ACTION_SIZE +
2090 sizeof(mgmt->u.action.u.measurement)))
2091 break;
2092 ieee80211_process_measurement_req(sdata, mgmt, len);
2093 goto handled;
2094 case WLAN_ACTION_SPCT_CHL_SWITCH:
2095 if (len < (IEEE80211_MIN_ACTION_SIZE +
2096 sizeof(mgmt->u.action.u.chan_switch)))
2097 break;
2098
2099 if (sdata->vif.type != NL80211_IFTYPE_STATION)
2100 break;
2101
2102 if (memcmp(mgmt->bssid, sdata->u.mgd.bssid, ETH_ALEN))
2103 break;
2104
2105 goto queue;
2106 }
2107 break;
2108 case WLAN_CATEGORY_SA_QUERY:
2109 if (len < (IEEE80211_MIN_ACTION_SIZE +
2110 sizeof(mgmt->u.action.u.sa_query)))
2111 break;
2112
2113 switch (mgmt->u.action.u.sa_query.action) {
2114 case WLAN_ACTION_SA_QUERY_REQUEST:
2115 if (sdata->vif.type != NL80211_IFTYPE_STATION)
2116 break;
2117 ieee80211_process_sa_query_req(sdata, mgmt, len);
2118 goto handled;
2119 }
2120 break;
2121 case WLAN_CATEGORY_MESH_PLINK:
2122 case WLAN_CATEGORY_MESH_PATH_SEL:
2123 if (!ieee80211_vif_is_mesh(&sdata->vif))
2124 break;
2125 goto queue;
2126 }
2127
2128 return RX_CONTINUE;
2129
2130 invalid:
2131 status->rx_flags |= IEEE80211_RX_MALFORMED_ACTION_FRM;
2132
2133 return RX_CONTINUE;
2134
2135 handled:
2136 if (rx->sta)
2137 rx->sta->rx_packets++;
2138 dev_kfree_skb(rx->skb);
2139 return RX_QUEUED;
2140
2141 queue:
2142 rx->skb->pkt_type = IEEE80211_SDATA_QUEUE_TYPE_FRAME;
2143 skb_queue_tail(&sdata->skb_queue, rx->skb);
2144 ieee80211_queue_work(&local->hw, &sdata->work);
2145 if (rx->sta)
2146 rx->sta->rx_packets++;
2147 return RX_QUEUED;
2148}
2149
2150static ieee80211_rx_result debug_noinline
2151ieee80211_rx_h_userspace_mgmt(struct ieee80211_rx_data *rx)
2152{
2153 struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(rx->skb);
2154
2155
2156 if (status->rx_flags & IEEE80211_RX_MALFORMED_ACTION_FRM)
2157 return RX_CONTINUE;
2158
2159
2160
2161
2162
2163
2164
2165
2166 if (cfg80211_rx_mgmt(rx->sdata->dev, status->freq,
2167 rx->skb->data, rx->skb->len,
2168 GFP_ATOMIC)) {
2169 if (rx->sta)
2170 rx->sta->rx_packets++;
2171 dev_kfree_skb(rx->skb);
2172 return RX_QUEUED;
2173 }
2174
2175
2176 return RX_CONTINUE;
2177}
2178
2179static ieee80211_rx_result debug_noinline
2180ieee80211_rx_h_action_return(struct ieee80211_rx_data *rx)
2181{
2182 struct ieee80211_local *local = rx->local;
2183 struct ieee80211_mgmt *mgmt = (struct ieee80211_mgmt *) rx->skb->data;
2184 struct sk_buff *nskb;
2185 struct ieee80211_sub_if_data *sdata = rx->sdata;
2186 struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(rx->skb);
2187
2188 if (!ieee80211_is_action(mgmt->frame_control))
2189 return RX_CONTINUE;
2190
2191
2192
2193
2194
2195
2196
2197
2198
2199
2200
2201 if (!(status->rx_flags & IEEE80211_RX_MALFORMED_ACTION_FRM) &&
2202 (sdata->vif.type == NL80211_IFTYPE_AP ||
2203 sdata->vif.type == NL80211_IFTYPE_AP_VLAN))
2204 return RX_DROP_MONITOR;
2205
2206
2207 if (mgmt->u.action.category & 0x80)
2208 return RX_DROP_UNUSABLE;
2209
2210 nskb = skb_copy_expand(rx->skb, local->hw.extra_tx_headroom, 0,
2211 GFP_ATOMIC);
2212 if (nskb) {
2213 struct ieee80211_mgmt *nmgmt = (void *)nskb->data;
2214
2215 nmgmt->u.action.category |= 0x80;
2216 memcpy(nmgmt->da, nmgmt->sa, ETH_ALEN);
2217 memcpy(nmgmt->sa, rx->sdata->vif.addr, ETH_ALEN);
2218
2219 memset(nskb->cb, 0, sizeof(nskb->cb));
2220
2221 ieee80211_tx_skb(rx->sdata, nskb);
2222 }
2223 dev_kfree_skb(rx->skb);
2224 return RX_QUEUED;
2225}
2226
2227static ieee80211_rx_result debug_noinline
2228ieee80211_rx_h_mgmt(struct ieee80211_rx_data *rx)
2229{
2230 struct ieee80211_sub_if_data *sdata = rx->sdata;
2231 ieee80211_rx_result rxs;
2232 struct ieee80211_mgmt *mgmt = (void *)rx->skb->data;
2233 __le16 stype;
2234
2235 rxs = ieee80211_work_rx_mgmt(rx->sdata, rx->skb);
2236 if (rxs != RX_CONTINUE)
2237 return rxs;
2238
2239 stype = mgmt->frame_control & cpu_to_le16(IEEE80211_FCTL_STYPE);
2240
2241 if (!ieee80211_vif_is_mesh(&sdata->vif) &&
2242 sdata->vif.type != NL80211_IFTYPE_ADHOC &&
2243 sdata->vif.type != NL80211_IFTYPE_STATION)
2244 return RX_DROP_MONITOR;
2245
2246 switch (stype) {
2247 case cpu_to_le16(IEEE80211_STYPE_BEACON):
2248 case cpu_to_le16(IEEE80211_STYPE_PROBE_RESP):
2249
2250 break;
2251 case cpu_to_le16(IEEE80211_STYPE_DEAUTH):
2252 case cpu_to_le16(IEEE80211_STYPE_DISASSOC):
2253 if (is_multicast_ether_addr(mgmt->da) &&
2254 !is_broadcast_ether_addr(mgmt->da))
2255 return RX_DROP_MONITOR;
2256
2257
2258 if (sdata->vif.type != NL80211_IFTYPE_STATION)
2259 return RX_DROP_MONITOR;
2260 break;
2261 case cpu_to_le16(IEEE80211_STYPE_PROBE_REQ):
2262 case cpu_to_le16(IEEE80211_STYPE_AUTH):
2263
2264 if (sdata->vif.type != NL80211_IFTYPE_ADHOC)
2265 return RX_DROP_MONITOR;
2266 break;
2267 default:
2268 return RX_DROP_MONITOR;
2269 }
2270
2271
2272 rx->skb->pkt_type = IEEE80211_SDATA_QUEUE_TYPE_FRAME;
2273 skb_queue_tail(&sdata->skb_queue, rx->skb);
2274 ieee80211_queue_work(&rx->local->hw, &sdata->work);
2275 if (rx->sta)
2276 rx->sta->rx_packets++;
2277
2278 return RX_QUEUED;
2279}
2280
2281static void ieee80211_rx_michael_mic_report(struct ieee80211_hdr *hdr,
2282 struct ieee80211_rx_data *rx)
2283{
2284 int keyidx;
2285 unsigned int hdrlen;
2286
2287 hdrlen = ieee80211_hdrlen(hdr->frame_control);
2288 if (rx->skb->len >= hdrlen + 4)
2289 keyidx = rx->skb->data[hdrlen + 3] >> 6;
2290 else
2291 keyidx = -1;
2292
2293 if (!rx->sta) {
2294
2295
2296
2297
2298 return;
2299 }
2300
2301 if (!ieee80211_has_protected(hdr->frame_control))
2302 return;
2303
2304 if (rx->sdata->vif.type == NL80211_IFTYPE_AP && keyidx) {
2305
2306
2307
2308
2309
2310
2311 return;
2312 }
2313
2314 if (!ieee80211_is_data(hdr->frame_control) &&
2315 !ieee80211_is_auth(hdr->frame_control))
2316 return;
2317
2318 mac80211_ev_michael_mic_failure(rx->sdata, keyidx, hdr, NULL,
2319 GFP_ATOMIC);
2320}
2321
2322
2323static void ieee80211_rx_cooked_monitor(struct ieee80211_rx_data *rx,
2324 struct ieee80211_rate *rate)
2325{
2326 struct ieee80211_sub_if_data *sdata;
2327 struct ieee80211_local *local = rx->local;
2328 struct ieee80211_rtap_hdr {
2329 struct ieee80211_radiotap_header hdr;
2330 u8 flags;
2331 u8 rate_or_pad;
2332 __le16 chan_freq;
2333 __le16 chan_flags;
2334 } __packed *rthdr;
2335 struct sk_buff *skb = rx->skb, *skb2;
2336 struct net_device *prev_dev = NULL;
2337 struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(skb);
2338
2339
2340
2341
2342
2343 if (rx->flags & IEEE80211_RX_CMNTR)
2344 goto out_free_skb;
2345 rx->flags |= IEEE80211_RX_CMNTR;
2346
2347 if (skb_headroom(skb) < sizeof(*rthdr) &&
2348 pskb_expand_head(skb, sizeof(*rthdr), 0, GFP_ATOMIC))
2349 goto out_free_skb;
2350
2351 rthdr = (void *)skb_push(skb, sizeof(*rthdr));
2352 memset(rthdr, 0, sizeof(*rthdr));
2353 rthdr->hdr.it_len = cpu_to_le16(sizeof(*rthdr));
2354 rthdr->hdr.it_present =
2355 cpu_to_le32((1 << IEEE80211_RADIOTAP_FLAGS) |
2356 (1 << IEEE80211_RADIOTAP_CHANNEL));
2357
2358 if (rate) {
2359 rthdr->rate_or_pad = rate->bitrate / 5;
2360 rthdr->hdr.it_present |=
2361 cpu_to_le32(1 << IEEE80211_RADIOTAP_RATE);
2362 }
2363 rthdr->chan_freq = cpu_to_le16(status->freq);
2364
2365 if (status->band == IEEE80211_BAND_5GHZ)
2366 rthdr->chan_flags = cpu_to_le16(IEEE80211_CHAN_OFDM |
2367 IEEE80211_CHAN_5GHZ);
2368 else
2369 rthdr->chan_flags = cpu_to_le16(IEEE80211_CHAN_DYN |
2370 IEEE80211_CHAN_2GHZ);
2371
2372 skb_set_mac_header(skb, 0);
2373 skb->ip_summed = CHECKSUM_UNNECESSARY;
2374 skb->pkt_type = PACKET_OTHERHOST;
2375 skb->protocol = htons(ETH_P_802_2);
2376
2377 list_for_each_entry_rcu(sdata, &local->interfaces, list) {
2378 if (!ieee80211_sdata_running(sdata))
2379 continue;
2380
2381 if (sdata->vif.type != NL80211_IFTYPE_MONITOR ||
2382 !(sdata->u.mntr_flags & MONITOR_FLAG_COOK_FRAMES))
2383 continue;
2384
2385 if (prev_dev) {
2386 skb2 = skb_clone(skb, GFP_ATOMIC);
2387 if (skb2) {
2388 skb2->dev = prev_dev;
2389 netif_receive_skb(skb2);
2390 }
2391 }
2392
2393 prev_dev = sdata->dev;
2394 sdata->dev->stats.rx_packets++;
2395 sdata->dev->stats.rx_bytes += skb->len;
2396 }
2397
2398 if (prev_dev) {
2399 skb->dev = prev_dev;
2400 netif_receive_skb(skb);
2401 return;
2402 }
2403
2404 out_free_skb:
2405 dev_kfree_skb(skb);
2406}
2407
2408static void ieee80211_rx_handlers_result(struct ieee80211_rx_data *rx,
2409 ieee80211_rx_result res)
2410{
2411 switch (res) {
2412 case RX_DROP_MONITOR:
2413 I802_DEBUG_INC(rx->sdata->local->rx_handlers_drop);
2414 if (rx->sta)
2415 rx->sta->rx_dropped++;
2416
2417 case RX_CONTINUE: {
2418 struct ieee80211_rate *rate = NULL;
2419 struct ieee80211_supported_band *sband;
2420 struct ieee80211_rx_status *status;
2421
2422 status = IEEE80211_SKB_RXCB((rx->skb));
2423
2424 sband = rx->local->hw.wiphy->bands[status->band];
2425 if (!(status->flag & RX_FLAG_HT))
2426 rate = &sband->bitrates[status->rate_idx];
2427
2428 ieee80211_rx_cooked_monitor(rx, rate);
2429 break;
2430 }
2431 case RX_DROP_UNUSABLE:
2432 I802_DEBUG_INC(rx->sdata->local->rx_handlers_drop);
2433 if (rx->sta)
2434 rx->sta->rx_dropped++;
2435 dev_kfree_skb(rx->skb);
2436 break;
2437 case RX_QUEUED:
2438 I802_DEBUG_INC(rx->sdata->local->rx_handlers_queued);
2439 break;
2440 }
2441}
2442
2443static void ieee80211_rx_handlers(struct ieee80211_rx_data *rx,
2444 struct sk_buff_head *frames)
2445{
2446 ieee80211_rx_result res = RX_DROP_MONITOR;
2447 struct sk_buff *skb;
2448
2449#define CALL_RXH(rxh) \
2450 do { \
2451 res = rxh(rx); \
2452 if (res != RX_CONTINUE) \
2453 goto rxh_next; \
2454 } while (0);
2455
2456 while ((skb = __skb_dequeue(frames))) {
2457
2458
2459
2460
2461
2462 rx->skb = skb;
2463 rx->flags = 0;
2464
2465 CALL_RXH(ieee80211_rx_h_decrypt)
2466 CALL_RXH(ieee80211_rx_h_check_more_data)
2467 CALL_RXH(ieee80211_rx_h_sta_process)
2468 CALL_RXH(ieee80211_rx_h_defragment)
2469 CALL_RXH(ieee80211_rx_h_ps_poll)
2470 CALL_RXH(ieee80211_rx_h_michael_mic_verify)
2471
2472 CALL_RXH(ieee80211_rx_h_remove_qos_control)
2473 CALL_RXH(ieee80211_rx_h_amsdu)
2474#ifdef CONFIG_MAC80211_MESH
2475 if (ieee80211_vif_is_mesh(&rx->sdata->vif))
2476 CALL_RXH(ieee80211_rx_h_mesh_fwding);
2477#endif
2478 CALL_RXH(ieee80211_rx_h_data)
2479
2480
2481 res = ieee80211_rx_h_ctrl(rx, frames);
2482 if (res != RX_CONTINUE)
2483 goto rxh_next;
2484
2485 CALL_RXH(ieee80211_rx_h_mgmt_check)
2486 CALL_RXH(ieee80211_rx_h_action)
2487 CALL_RXH(ieee80211_rx_h_userspace_mgmt)
2488 CALL_RXH(ieee80211_rx_h_action_return)
2489 CALL_RXH(ieee80211_rx_h_mgmt)
2490
2491 rxh_next:
2492 ieee80211_rx_handlers_result(rx, res);
2493
2494#undef CALL_RXH
2495 }
2496}
2497
2498static void ieee80211_invoke_rx_handlers(struct ieee80211_rx_data *rx)
2499{
2500 struct sk_buff_head reorder_release;
2501 ieee80211_rx_result res = RX_DROP_MONITOR;
2502
2503 __skb_queue_head_init(&reorder_release);
2504
2505#define CALL_RXH(rxh) \
2506 do { \
2507 res = rxh(rx); \
2508 if (res != RX_CONTINUE) \
2509 goto rxh_next; \
2510 } while (0);
2511
2512 CALL_RXH(ieee80211_rx_h_passive_scan)
2513 CALL_RXH(ieee80211_rx_h_check)
2514
2515 ieee80211_rx_reorder_ampdu(rx, &reorder_release);
2516
2517 ieee80211_rx_handlers(rx, &reorder_release);
2518 return;
2519
2520 rxh_next:
2521 ieee80211_rx_handlers_result(rx, res);
2522
2523#undef CALL_RXH
2524}
2525
2526
2527
2528
2529
2530
2531void ieee80211_release_reorder_timeout(struct sta_info *sta, int tid)
2532{
2533 struct sk_buff_head frames;
2534 struct ieee80211_rx_data rx = {
2535 .sta = sta,
2536 .sdata = sta->sdata,
2537 .local = sta->local,
2538 .queue = tid,
2539 };
2540 struct tid_ampdu_rx *tid_agg_rx;
2541
2542 tid_agg_rx = rcu_dereference(sta->ampdu_mlme.tid_rx[tid]);
2543 if (!tid_agg_rx)
2544 return;
2545
2546 __skb_queue_head_init(&frames);
2547
2548 spin_lock(&tid_agg_rx->reorder_lock);
2549 ieee80211_sta_reorder_release(&sta->local->hw, tid_agg_rx, &frames);
2550 spin_unlock(&tid_agg_rx->reorder_lock);
2551
2552 ieee80211_rx_handlers(&rx, &frames);
2553}
2554
2555
2556
2557static int prepare_for_handlers(struct ieee80211_rx_data *rx,
2558 struct ieee80211_hdr *hdr)
2559{
2560 struct ieee80211_sub_if_data *sdata = rx->sdata;
2561 struct sk_buff *skb = rx->skb;
2562 struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(skb);
2563 u8 *bssid = ieee80211_get_bssid(hdr, skb->len, sdata->vif.type);
2564 int multicast = is_multicast_ether_addr(hdr->addr1);
2565
2566 switch (sdata->vif.type) {
2567 case NL80211_IFTYPE_STATION:
2568 if (!bssid && !sdata->u.mgd.use_4addr)
2569 return 0;
2570 if (!multicast &&
2571 compare_ether_addr(sdata->vif.addr, hdr->addr1) != 0) {
2572 if (!(sdata->dev->flags & IFF_PROMISC))
2573 return 0;
2574 status->rx_flags &= ~IEEE80211_RX_RA_MATCH;
2575 }
2576 break;
2577 case NL80211_IFTYPE_ADHOC:
2578 if (!bssid)
2579 return 0;
2580 if (ieee80211_is_beacon(hdr->frame_control)) {
2581 return 1;
2582 }
2583 else if (!ieee80211_bssid_match(bssid, sdata->u.ibss.bssid)) {
2584 if (!(status->rx_flags & IEEE80211_RX_IN_SCAN))
2585 return 0;
2586 status->rx_flags &= ~IEEE80211_RX_RA_MATCH;
2587 } else if (!multicast &&
2588 compare_ether_addr(sdata->vif.addr,
2589 hdr->addr1) != 0) {
2590 if (!(sdata->dev->flags & IFF_PROMISC))
2591 return 0;
2592 status->rx_flags &= ~IEEE80211_RX_RA_MATCH;
2593 } else if (!rx->sta) {
2594 int rate_idx;
2595 if (status->flag & RX_FLAG_HT)
2596 rate_idx = 0;
2597 else
2598 rate_idx = status->rate_idx;
2599 rx->sta = ieee80211_ibss_add_sta(sdata, bssid,
2600 hdr->addr2, BIT(rate_idx), GFP_ATOMIC);
2601 }
2602 break;
2603 case NL80211_IFTYPE_MESH_POINT:
2604 if (!multicast &&
2605 compare_ether_addr(sdata->vif.addr,
2606 hdr->addr1) != 0) {
2607 if (!(sdata->dev->flags & IFF_PROMISC))
2608 return 0;
2609
2610 status->rx_flags &= ~IEEE80211_RX_RA_MATCH;
2611 }
2612 break;
2613 case NL80211_IFTYPE_AP_VLAN:
2614 case NL80211_IFTYPE_AP:
2615 if (!bssid) {
2616 if (compare_ether_addr(sdata->vif.addr,
2617 hdr->addr1))
2618 return 0;
2619 } else if (!ieee80211_bssid_match(bssid,
2620 sdata->vif.addr)) {
2621 if (!(status->rx_flags & IEEE80211_RX_IN_SCAN))
2622 return 0;
2623 status->rx_flags &= ~IEEE80211_RX_RA_MATCH;
2624 }
2625 break;
2626 case NL80211_IFTYPE_WDS:
2627 if (bssid || !ieee80211_is_data(hdr->frame_control))
2628 return 0;
2629 if (compare_ether_addr(sdata->u.wds.remote_addr, hdr->addr2))
2630 return 0;
2631 break;
2632 default:
2633
2634 WARN_ON(1);
2635 break;
2636 }
2637
2638 return 1;
2639}
2640
2641
2642
2643
2644
2645
2646
2647static bool ieee80211_prepare_and_rx_handle(struct ieee80211_rx_data *rx,
2648 struct sk_buff *skb, bool consume)
2649{
2650 struct ieee80211_local *local = rx->local;
2651 struct ieee80211_sub_if_data *sdata = rx->sdata;
2652 struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(skb);
2653 struct ieee80211_hdr *hdr = (void *)skb->data;
2654 int prepares;
2655
2656 rx->skb = skb;
2657 status->rx_flags |= IEEE80211_RX_RA_MATCH;
2658 prepares = prepare_for_handlers(rx, hdr);
2659
2660 if (!prepares)
2661 return false;
2662
2663 if (status->flag & RX_FLAG_MMIC_ERROR) {
2664 if (status->rx_flags & IEEE80211_RX_RA_MATCH)
2665 ieee80211_rx_michael_mic_report(hdr, rx);
2666 return false;
2667 }
2668
2669 if (!consume) {
2670 skb = skb_copy(skb, GFP_ATOMIC);
2671 if (!skb) {
2672 if (net_ratelimit())
2673 wiphy_debug(local->hw.wiphy,
2674 "failed to copy multicast frame for %s\n",
2675 sdata->name);
2676 return true;
2677 }
2678
2679 rx->skb = skb;
2680 }
2681
2682 ieee80211_invoke_rx_handlers(rx);
2683 return true;
2684}
2685
2686
2687
2688
2689
2690static void __ieee80211_rx_handle_packet(struct ieee80211_hw *hw,
2691 struct sk_buff *skb)
2692{
2693 struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(skb);
2694 struct ieee80211_local *local = hw_to_local(hw);
2695 struct ieee80211_sub_if_data *sdata;
2696 struct ieee80211_hdr *hdr;
2697 __le16 fc;
2698 struct ieee80211_rx_data rx;
2699 struct ieee80211_sub_if_data *prev;
2700 struct sta_info *sta, *tmp, *prev_sta;
2701 int err = 0;
2702
2703 fc = ((struct ieee80211_hdr *)skb->data)->frame_control;
2704 memset(&rx, 0, sizeof(rx));
2705 rx.skb = skb;
2706 rx.local = local;
2707
2708 if (ieee80211_is_data(fc) || ieee80211_is_mgmt(fc))
2709 local->dot11ReceivedFragmentCount++;
2710
2711 if (unlikely(test_bit(SCAN_HW_SCANNING, &local->scanning) ||
2712 test_bit(SCAN_OFF_CHANNEL, &local->scanning)))
2713 status->rx_flags |= IEEE80211_RX_IN_SCAN;
2714
2715 if (ieee80211_is_mgmt(fc))
2716 err = skb_linearize(skb);
2717 else
2718 err = !pskb_may_pull(skb, ieee80211_hdrlen(fc));
2719
2720 if (err) {
2721 dev_kfree_skb(skb);
2722 return;
2723 }
2724
2725 hdr = (struct ieee80211_hdr *)skb->data;
2726 ieee80211_parse_qos(&rx);
2727 ieee80211_verify_alignment(&rx);
2728
2729 if (ieee80211_is_data(fc)) {
2730 prev_sta = NULL;
2731
2732 for_each_sta_info(local, hdr->addr2, sta, tmp) {
2733 if (!prev_sta) {
2734 prev_sta = sta;
2735 continue;
2736 }
2737
2738 rx.sta = prev_sta;
2739 rx.sdata = prev_sta->sdata;
2740 ieee80211_prepare_and_rx_handle(&rx, skb, false);
2741
2742 prev_sta = sta;
2743 }
2744
2745 if (prev_sta) {
2746 rx.sta = prev_sta;
2747 rx.sdata = prev_sta->sdata;
2748
2749 if (ieee80211_prepare_and_rx_handle(&rx, skb, true))
2750 return;
2751 goto out;
2752 }
2753 }
2754
2755 prev = NULL;
2756
2757 list_for_each_entry_rcu(sdata, &local->interfaces, list) {
2758 if (!ieee80211_sdata_running(sdata))
2759 continue;
2760
2761 if (sdata->vif.type == NL80211_IFTYPE_MONITOR ||
2762 sdata->vif.type == NL80211_IFTYPE_AP_VLAN)
2763 continue;
2764
2765
2766
2767
2768
2769
2770
2771 if (!prev) {
2772 prev = sdata;
2773 continue;
2774 }
2775
2776 rx.sta = sta_info_get_bss(prev, hdr->addr2);
2777 rx.sdata = prev;
2778 ieee80211_prepare_and_rx_handle(&rx, skb, false);
2779
2780 prev = sdata;
2781 }
2782
2783 if (prev) {
2784 rx.sta = sta_info_get_bss(prev, hdr->addr2);
2785 rx.sdata = prev;
2786
2787 if (ieee80211_prepare_and_rx_handle(&rx, skb, true))
2788 return;
2789 }
2790
2791 out:
2792 dev_kfree_skb(skb);
2793}
2794
2795
2796
2797
2798
2799void ieee80211_rx(struct ieee80211_hw *hw, struct sk_buff *skb)
2800{
2801 struct ieee80211_local *local = hw_to_local(hw);
2802 struct ieee80211_rate *rate = NULL;
2803 struct ieee80211_supported_band *sband;
2804 struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(skb);
2805
2806 WARN_ON_ONCE(softirq_count() == 0);
2807
2808 if (WARN_ON(status->band < 0 ||
2809 status->band >= IEEE80211_NUM_BANDS))
2810 goto drop;
2811
2812 sband = local->hw.wiphy->bands[status->band];
2813 if (WARN_ON(!sband))
2814 goto drop;
2815
2816
2817
2818
2819
2820
2821
2822
2823 if (unlikely(local->quiescing || local->suspended))
2824 goto drop;
2825
2826
2827
2828
2829
2830 if (WARN_ON(!local->started))
2831 goto drop;
2832
2833 if (likely(!(status->flag & RX_FLAG_FAILED_PLCP_CRC))) {
2834
2835
2836
2837
2838
2839 if (status->flag & RX_FLAG_HT) {
2840
2841
2842
2843
2844
2845
2846
2847
2848
2849
2850 if (WARN((status->rate_idx < 0 ||
2851 status->rate_idx > 76),
2852 "Rate marked as an HT rate but passed "
2853 "status->rate_idx is not "
2854 "an MCS index [0-76]: %d (0x%02x)\n",
2855 status->rate_idx,
2856 status->rate_idx))
2857 goto drop;
2858 } else {
2859 if (WARN_ON(status->rate_idx < 0 ||
2860 status->rate_idx >= sband->n_bitrates))
2861 goto drop;
2862 rate = &sband->bitrates[status->rate_idx];
2863 }
2864 }
2865
2866 status->rx_flags = 0;
2867
2868
2869
2870
2871
2872
2873 rcu_read_lock();
2874
2875
2876
2877
2878
2879
2880
2881 skb = ieee80211_rx_monitor(local, skb, rate);
2882 if (!skb) {
2883 rcu_read_unlock();
2884 return;
2885 }
2886
2887 __ieee80211_rx_handle_packet(hw, skb);
2888
2889 rcu_read_unlock();
2890
2891 return;
2892 drop:
2893 kfree_skb(skb);
2894}
2895EXPORT_SYMBOL(ieee80211_rx);
2896
2897
2898
2899void ieee80211_rx_irqsafe(struct ieee80211_hw *hw, struct sk_buff *skb)
2900{
2901 struct ieee80211_local *local = hw_to_local(hw);
2902
2903 BUILD_BUG_ON(sizeof(struct ieee80211_rx_status) > sizeof(skb->cb));
2904
2905 skb->pkt_type = IEEE80211_RX_MSG;
2906 skb_queue_tail(&local->skb_queue, skb);
2907 tasklet_schedule(&local->tasklet);
2908}
2909EXPORT_SYMBOL(ieee80211_rx_irqsafe);
2910