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