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