0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012 #include <linux/jiffies.h>
0013 #include <linux/slab.h>
0014 #include <linux/kernel.h>
0015 #include <linux/skbuff.h>
0016 #include <linux/netdevice.h>
0017 #include <linux/etherdevice.h>
0018 #include <linux/rcupdate.h>
0019 #include <linux/export.h>
0020 #include <linux/kcov.h>
0021 #include <linux/bitops.h>
0022 #include <net/mac80211.h>
0023 #include <net/ieee80211_radiotap.h>
0024 #include <asm/unaligned.h>
0025
0026 #include "ieee80211_i.h"
0027 #include "driver-ops.h"
0028 #include "led.h"
0029 #include "mesh.h"
0030 #include "wep.h"
0031 #include "wpa.h"
0032 #include "tkip.h"
0033 #include "wme.h"
0034 #include "rate.h"
0035
0036
0037
0038
0039
0040
0041
0042 static struct sk_buff *ieee80211_clean_skb(struct sk_buff *skb,
0043 unsigned int present_fcs_len,
0044 unsigned int rtap_space)
0045 {
0046 struct ieee80211_hdr *hdr;
0047 unsigned int hdrlen;
0048 __le16 fc;
0049
0050 if (present_fcs_len)
0051 __pskb_trim(skb, skb->len - present_fcs_len);
0052 __pskb_pull(skb, rtap_space);
0053
0054 hdr = (void *)skb->data;
0055 fc = hdr->frame_control;
0056
0057
0058
0059
0060
0061
0062
0063
0064 if (likely(!ieee80211_is_mgmt(fc) || !ieee80211_has_order(fc)))
0065 return skb;
0066
0067 hdrlen = ieee80211_hdrlen(fc);
0068 hdr->frame_control &= ~cpu_to_le16(IEEE80211_FCTL_ORDER);
0069
0070 if (!pskb_may_pull(skb, hdrlen)) {
0071 dev_kfree_skb(skb);
0072 return NULL;
0073 }
0074
0075 memmove(skb->data + IEEE80211_HT_CTL_LEN, skb->data,
0076 hdrlen - IEEE80211_HT_CTL_LEN);
0077 __pskb_pull(skb, IEEE80211_HT_CTL_LEN);
0078
0079 return skb;
0080 }
0081
0082 static inline bool should_drop_frame(struct sk_buff *skb, int present_fcs_len,
0083 unsigned int rtap_space)
0084 {
0085 struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(skb);
0086 struct ieee80211_hdr *hdr;
0087
0088 hdr = (void *)(skb->data + rtap_space);
0089
0090 if (status->flag & (RX_FLAG_FAILED_FCS_CRC |
0091 RX_FLAG_FAILED_PLCP_CRC |
0092 RX_FLAG_ONLY_MONITOR |
0093 RX_FLAG_NO_PSDU))
0094 return true;
0095
0096 if (unlikely(skb->len < 16 + present_fcs_len + rtap_space))
0097 return true;
0098
0099 if (ieee80211_is_ctl(hdr->frame_control) &&
0100 !ieee80211_is_pspoll(hdr->frame_control) &&
0101 !ieee80211_is_back_req(hdr->frame_control))
0102 return true;
0103
0104 return false;
0105 }
0106
0107 static int
0108 ieee80211_rx_radiotap_hdrlen(struct ieee80211_local *local,
0109 struct ieee80211_rx_status *status,
0110 struct sk_buff *skb)
0111 {
0112 int len;
0113
0114
0115 len = sizeof(struct ieee80211_radiotap_header) + 8;
0116
0117
0118 if (status->chains)
0119 len += 4 * hweight8(status->chains);
0120
0121 if (status->flag & RX_FLAG_RADIOTAP_VENDOR_DATA)
0122 len += 4;
0123
0124 if (ieee80211_have_rx_timestamp(status)) {
0125 len = ALIGN(len, 8);
0126 len += 8;
0127 }
0128 if (ieee80211_hw_check(&local->hw, SIGNAL_DBM))
0129 len += 1;
0130
0131
0132 if (!status->chains)
0133 len += 1;
0134
0135
0136 len = ALIGN(len, 2);
0137
0138 if (status->encoding == RX_ENC_HT)
0139 len += 3;
0140
0141 if (status->flag & RX_FLAG_AMPDU_DETAILS) {
0142 len = ALIGN(len, 4);
0143 len += 8;
0144 }
0145
0146 if (status->encoding == RX_ENC_VHT) {
0147 len = ALIGN(len, 2);
0148 len += 12;
0149 }
0150
0151 if (local->hw.radiotap_timestamp.units_pos >= 0) {
0152 len = ALIGN(len, 8);
0153 len += 12;
0154 }
0155
0156 if (status->encoding == RX_ENC_HE &&
0157 status->flag & RX_FLAG_RADIOTAP_HE) {
0158 len = ALIGN(len, 2);
0159 len += 12;
0160 BUILD_BUG_ON(sizeof(struct ieee80211_radiotap_he) != 12);
0161 }
0162
0163 if (status->encoding == RX_ENC_HE &&
0164 status->flag & RX_FLAG_RADIOTAP_HE_MU) {
0165 len = ALIGN(len, 2);
0166 len += 12;
0167 BUILD_BUG_ON(sizeof(struct ieee80211_radiotap_he_mu) != 12);
0168 }
0169
0170 if (status->flag & RX_FLAG_NO_PSDU)
0171 len += 1;
0172
0173 if (status->flag & RX_FLAG_RADIOTAP_LSIG) {
0174 len = ALIGN(len, 2);
0175 len += 4;
0176 BUILD_BUG_ON(sizeof(struct ieee80211_radiotap_lsig) != 4);
0177 }
0178
0179 if (status->chains) {
0180
0181 len += 2 * hweight8(status->chains);
0182 }
0183
0184 if (status->flag & RX_FLAG_RADIOTAP_VENDOR_DATA) {
0185 struct ieee80211_vendor_radiotap *rtap;
0186 int vendor_data_offset = 0;
0187
0188
0189
0190
0191
0192 if (status->flag & RX_FLAG_RADIOTAP_HE)
0193 vendor_data_offset +=
0194 sizeof(struct ieee80211_radiotap_he);
0195 if (status->flag & RX_FLAG_RADIOTAP_HE_MU)
0196 vendor_data_offset +=
0197 sizeof(struct ieee80211_radiotap_he_mu);
0198 if (status->flag & RX_FLAG_RADIOTAP_LSIG)
0199 vendor_data_offset +=
0200 sizeof(struct ieee80211_radiotap_lsig);
0201
0202 rtap = (void *)&skb->data[vendor_data_offset];
0203
0204
0205 len = ALIGN(len, 2);
0206
0207 len += 6;
0208 if (WARN_ON(rtap->align == 0))
0209 rtap->align = 1;
0210 len = ALIGN(len, rtap->align);
0211 len += rtap->len + rtap->pad;
0212 }
0213
0214 return len;
0215 }
0216
0217 static void __ieee80211_queue_skb_to_iface(struct ieee80211_sub_if_data *sdata,
0218 struct sta_info *sta,
0219 struct sk_buff *skb)
0220 {
0221 skb_queue_tail(&sdata->skb_queue, skb);
0222 ieee80211_queue_work(&sdata->local->hw, &sdata->work);
0223 if (sta)
0224 sta->deflink.rx_stats.packets++;
0225 }
0226
0227 static void ieee80211_queue_skb_to_iface(struct ieee80211_sub_if_data *sdata,
0228 struct sta_info *sta,
0229 struct sk_buff *skb)
0230 {
0231 skb->protocol = 0;
0232 __ieee80211_queue_skb_to_iface(sdata, sta, skb);
0233 }
0234
0235 static void ieee80211_handle_mu_mimo_mon(struct ieee80211_sub_if_data *sdata,
0236 struct sk_buff *skb,
0237 int rtap_space)
0238 {
0239 struct {
0240 struct ieee80211_hdr_3addr hdr;
0241 u8 category;
0242 u8 action_code;
0243 } __packed __aligned(2) action;
0244
0245 if (!sdata)
0246 return;
0247
0248 BUILD_BUG_ON(sizeof(action) != IEEE80211_MIN_ACTION_SIZE + 1);
0249
0250 if (skb->len < rtap_space + sizeof(action) +
0251 VHT_MUMIMO_GROUPS_DATA_LEN)
0252 return;
0253
0254 if (!is_valid_ether_addr(sdata->u.mntr.mu_follow_addr))
0255 return;
0256
0257 skb_copy_bits(skb, rtap_space, &action, sizeof(action));
0258
0259 if (!ieee80211_is_action(action.hdr.frame_control))
0260 return;
0261
0262 if (action.category != WLAN_CATEGORY_VHT)
0263 return;
0264
0265 if (action.action_code != WLAN_VHT_ACTION_GROUPID_MGMT)
0266 return;
0267
0268 if (!ether_addr_equal(action.hdr.addr1, sdata->u.mntr.mu_follow_addr))
0269 return;
0270
0271 skb = skb_copy(skb, GFP_ATOMIC);
0272 if (!skb)
0273 return;
0274
0275 ieee80211_queue_skb_to_iface(sdata, NULL, skb);
0276 }
0277
0278
0279
0280
0281
0282
0283 static void
0284 ieee80211_add_rx_radiotap_header(struct ieee80211_local *local,
0285 struct sk_buff *skb,
0286 struct ieee80211_rate *rate,
0287 int rtap_len, bool has_fcs)
0288 {
0289 struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(skb);
0290 struct ieee80211_radiotap_header *rthdr;
0291 unsigned char *pos;
0292 __le32 *it_present;
0293 u32 it_present_val;
0294 u16 rx_flags = 0;
0295 u16 channel_flags = 0;
0296 int mpdulen, chain;
0297 unsigned long chains = status->chains;
0298 struct ieee80211_vendor_radiotap rtap = {};
0299 struct ieee80211_radiotap_he he = {};
0300 struct ieee80211_radiotap_he_mu he_mu = {};
0301 struct ieee80211_radiotap_lsig lsig = {};
0302
0303 if (status->flag & RX_FLAG_RADIOTAP_HE) {
0304 he = *(struct ieee80211_radiotap_he *)skb->data;
0305 skb_pull(skb, sizeof(he));
0306 WARN_ON_ONCE(status->encoding != RX_ENC_HE);
0307 }
0308
0309 if (status->flag & RX_FLAG_RADIOTAP_HE_MU) {
0310 he_mu = *(struct ieee80211_radiotap_he_mu *)skb->data;
0311 skb_pull(skb, sizeof(he_mu));
0312 }
0313
0314 if (status->flag & RX_FLAG_RADIOTAP_LSIG) {
0315 lsig = *(struct ieee80211_radiotap_lsig *)skb->data;
0316 skb_pull(skb, sizeof(lsig));
0317 }
0318
0319 if (status->flag & RX_FLAG_RADIOTAP_VENDOR_DATA) {
0320 rtap = *(struct ieee80211_vendor_radiotap *)skb->data;
0321
0322 skb_pull(skb, sizeof(rtap) + rtap.len + rtap.pad);
0323 }
0324
0325 mpdulen = skb->len;
0326 if (!(has_fcs && ieee80211_hw_check(&local->hw, RX_INCLUDES_FCS)))
0327 mpdulen += FCS_LEN;
0328
0329 rthdr = skb_push(skb, rtap_len);
0330 memset(rthdr, 0, rtap_len - rtap.len - rtap.pad);
0331 it_present = &rthdr->it_present;
0332
0333
0334 rthdr->it_len = cpu_to_le16(rtap_len);
0335 it_present_val = BIT(IEEE80211_RADIOTAP_FLAGS) |
0336 BIT(IEEE80211_RADIOTAP_CHANNEL) |
0337 BIT(IEEE80211_RADIOTAP_RX_FLAGS);
0338
0339 if (!status->chains)
0340 it_present_val |= BIT(IEEE80211_RADIOTAP_ANTENNA);
0341
0342 for_each_set_bit(chain, &chains, IEEE80211_MAX_CHAINS) {
0343 it_present_val |=
0344 BIT(IEEE80211_RADIOTAP_EXT) |
0345 BIT(IEEE80211_RADIOTAP_RADIOTAP_NAMESPACE);
0346 put_unaligned_le32(it_present_val, it_present);
0347 it_present++;
0348 it_present_val = BIT(IEEE80211_RADIOTAP_ANTENNA) |
0349 BIT(IEEE80211_RADIOTAP_DBM_ANTSIGNAL);
0350 }
0351
0352 if (status->flag & RX_FLAG_RADIOTAP_VENDOR_DATA) {
0353 it_present_val |= BIT(IEEE80211_RADIOTAP_VENDOR_NAMESPACE) |
0354 BIT(IEEE80211_RADIOTAP_EXT);
0355 put_unaligned_le32(it_present_val, it_present);
0356 it_present++;
0357 it_present_val = rtap.present;
0358 }
0359
0360 put_unaligned_le32(it_present_val, it_present);
0361
0362
0363
0364
0365
0366
0367 pos = (void *)&rthdr->it_optional[it_present + 1 - rthdr->it_optional];
0368
0369
0370
0371
0372 if (ieee80211_have_rx_timestamp(status)) {
0373
0374 while ((pos - (u8 *)rthdr) & 7)
0375 *pos++ = 0;
0376 put_unaligned_le64(
0377 ieee80211_calculate_rx_timestamp(local, status,
0378 mpdulen, 0),
0379 pos);
0380 rthdr->it_present |= cpu_to_le32(BIT(IEEE80211_RADIOTAP_TSFT));
0381 pos += 8;
0382 }
0383
0384
0385 if (has_fcs && ieee80211_hw_check(&local->hw, RX_INCLUDES_FCS))
0386 *pos |= IEEE80211_RADIOTAP_F_FCS;
0387 if (status->flag & (RX_FLAG_FAILED_FCS_CRC | RX_FLAG_FAILED_PLCP_CRC))
0388 *pos |= IEEE80211_RADIOTAP_F_BADFCS;
0389 if (status->enc_flags & RX_ENC_FLAG_SHORTPRE)
0390 *pos |= IEEE80211_RADIOTAP_F_SHORTPRE;
0391 pos++;
0392
0393
0394 if (!rate || status->encoding != RX_ENC_LEGACY) {
0395
0396
0397
0398
0399
0400
0401 *pos = 0;
0402 } else {
0403 int shift = 0;
0404 rthdr->it_present |= cpu_to_le32(BIT(IEEE80211_RADIOTAP_RATE));
0405 if (status->bw == RATE_INFO_BW_10)
0406 shift = 1;
0407 else if (status->bw == RATE_INFO_BW_5)
0408 shift = 2;
0409 *pos = DIV_ROUND_UP(rate->bitrate, 5 * (1 << shift));
0410 }
0411 pos++;
0412
0413
0414
0415 put_unaligned_le16(status->freq, pos);
0416 pos += 2;
0417 if (status->bw == RATE_INFO_BW_10)
0418 channel_flags |= IEEE80211_CHAN_HALF;
0419 else if (status->bw == RATE_INFO_BW_5)
0420 channel_flags |= IEEE80211_CHAN_QUARTER;
0421
0422 if (status->band == NL80211_BAND_5GHZ ||
0423 status->band == NL80211_BAND_6GHZ)
0424 channel_flags |= IEEE80211_CHAN_OFDM | IEEE80211_CHAN_5GHZ;
0425 else if (status->encoding != RX_ENC_LEGACY)
0426 channel_flags |= IEEE80211_CHAN_DYN | IEEE80211_CHAN_2GHZ;
0427 else if (rate && rate->flags & IEEE80211_RATE_ERP_G)
0428 channel_flags |= IEEE80211_CHAN_OFDM | IEEE80211_CHAN_2GHZ;
0429 else if (rate)
0430 channel_flags |= IEEE80211_CHAN_CCK | IEEE80211_CHAN_2GHZ;
0431 else
0432 channel_flags |= IEEE80211_CHAN_2GHZ;
0433 put_unaligned_le16(channel_flags, pos);
0434 pos += 2;
0435
0436
0437 if (ieee80211_hw_check(&local->hw, SIGNAL_DBM) &&
0438 !(status->flag & RX_FLAG_NO_SIGNAL_VAL)) {
0439 *pos = status->signal;
0440 rthdr->it_present |=
0441 cpu_to_le32(BIT(IEEE80211_RADIOTAP_DBM_ANTSIGNAL));
0442 pos++;
0443 }
0444
0445
0446
0447 if (!status->chains) {
0448
0449 *pos = status->antenna;
0450 pos++;
0451 }
0452
0453
0454
0455
0456
0457 if ((pos - (u8 *)rthdr) & 1)
0458 *pos++ = 0;
0459 if (status->flag & RX_FLAG_FAILED_PLCP_CRC)
0460 rx_flags |= IEEE80211_RADIOTAP_F_RX_BADPLCP;
0461 put_unaligned_le16(rx_flags, pos);
0462 pos += 2;
0463
0464 if (status->encoding == RX_ENC_HT) {
0465 unsigned int stbc;
0466
0467 rthdr->it_present |= cpu_to_le32(BIT(IEEE80211_RADIOTAP_MCS));
0468 *pos = local->hw.radiotap_mcs_details;
0469 if (status->enc_flags & RX_ENC_FLAG_HT_GF)
0470 *pos |= IEEE80211_RADIOTAP_MCS_HAVE_FMT;
0471 if (status->enc_flags & RX_ENC_FLAG_LDPC)
0472 *pos |= IEEE80211_RADIOTAP_MCS_HAVE_FEC;
0473 pos++;
0474 *pos = 0;
0475 if (status->enc_flags & RX_ENC_FLAG_SHORT_GI)
0476 *pos |= IEEE80211_RADIOTAP_MCS_SGI;
0477 if (status->bw == RATE_INFO_BW_40)
0478 *pos |= IEEE80211_RADIOTAP_MCS_BW_40;
0479 if (status->enc_flags & RX_ENC_FLAG_HT_GF)
0480 *pos |= IEEE80211_RADIOTAP_MCS_FMT_GF;
0481 if (status->enc_flags & RX_ENC_FLAG_LDPC)
0482 *pos |= IEEE80211_RADIOTAP_MCS_FEC_LDPC;
0483 stbc = (status->enc_flags & RX_ENC_FLAG_STBC_MASK) >> RX_ENC_FLAG_STBC_SHIFT;
0484 *pos |= stbc << IEEE80211_RADIOTAP_MCS_STBC_SHIFT;
0485 pos++;
0486 *pos++ = status->rate_idx;
0487 }
0488
0489 if (status->flag & RX_FLAG_AMPDU_DETAILS) {
0490 u16 flags = 0;
0491
0492
0493 while ((pos - (u8 *)rthdr) & 3)
0494 pos++;
0495 rthdr->it_present |=
0496 cpu_to_le32(BIT(IEEE80211_RADIOTAP_AMPDU_STATUS));
0497 put_unaligned_le32(status->ampdu_reference, pos);
0498 pos += 4;
0499 if (status->flag & RX_FLAG_AMPDU_LAST_KNOWN)
0500 flags |= IEEE80211_RADIOTAP_AMPDU_LAST_KNOWN;
0501 if (status->flag & RX_FLAG_AMPDU_IS_LAST)
0502 flags |= IEEE80211_RADIOTAP_AMPDU_IS_LAST;
0503 if (status->flag & RX_FLAG_AMPDU_DELIM_CRC_ERROR)
0504 flags |= IEEE80211_RADIOTAP_AMPDU_DELIM_CRC_ERR;
0505 if (status->flag & RX_FLAG_AMPDU_DELIM_CRC_KNOWN)
0506 flags |= IEEE80211_RADIOTAP_AMPDU_DELIM_CRC_KNOWN;
0507 if (status->flag & RX_FLAG_AMPDU_EOF_BIT_KNOWN)
0508 flags |= IEEE80211_RADIOTAP_AMPDU_EOF_KNOWN;
0509 if (status->flag & RX_FLAG_AMPDU_EOF_BIT)
0510 flags |= IEEE80211_RADIOTAP_AMPDU_EOF;
0511 put_unaligned_le16(flags, pos);
0512 pos += 2;
0513 if (status->flag & RX_FLAG_AMPDU_DELIM_CRC_KNOWN)
0514 *pos++ = status->ampdu_delimiter_crc;
0515 else
0516 *pos++ = 0;
0517 *pos++ = 0;
0518 }
0519
0520 if (status->encoding == RX_ENC_VHT) {
0521 u16 known = local->hw.radiotap_vht_details;
0522
0523 rthdr->it_present |= cpu_to_le32(BIT(IEEE80211_RADIOTAP_VHT));
0524 put_unaligned_le16(known, pos);
0525 pos += 2;
0526
0527 if (status->enc_flags & RX_ENC_FLAG_SHORT_GI)
0528 *pos |= IEEE80211_RADIOTAP_VHT_FLAG_SGI;
0529
0530 if (status->enc_flags & RX_ENC_FLAG_STBC_MASK)
0531 *pos |= IEEE80211_RADIOTAP_VHT_FLAG_STBC;
0532 if (status->enc_flags & RX_ENC_FLAG_BF)
0533 *pos |= IEEE80211_RADIOTAP_VHT_FLAG_BEAMFORMED;
0534 pos++;
0535
0536 switch (status->bw) {
0537 case RATE_INFO_BW_80:
0538 *pos++ = 4;
0539 break;
0540 case RATE_INFO_BW_160:
0541 *pos++ = 11;
0542 break;
0543 case RATE_INFO_BW_40:
0544 *pos++ = 1;
0545 break;
0546 default:
0547 *pos++ = 0;
0548 }
0549
0550 *pos = (status->rate_idx << 4) | status->nss;
0551 pos += 4;
0552
0553 if (status->enc_flags & RX_ENC_FLAG_LDPC)
0554 *pos |= IEEE80211_RADIOTAP_CODING_LDPC_USER0;
0555 pos++;
0556
0557 pos++;
0558
0559 pos += 2;
0560 }
0561
0562 if (local->hw.radiotap_timestamp.units_pos >= 0) {
0563 u16 accuracy = 0;
0564 u8 flags = IEEE80211_RADIOTAP_TIMESTAMP_FLAG_32BIT;
0565
0566 rthdr->it_present |=
0567 cpu_to_le32(BIT(IEEE80211_RADIOTAP_TIMESTAMP));
0568
0569
0570 while ((pos - (u8 *)rthdr) & 7)
0571 pos++;
0572
0573 put_unaligned_le64(status->device_timestamp, pos);
0574 pos += sizeof(u64);
0575
0576 if (local->hw.radiotap_timestamp.accuracy >= 0) {
0577 accuracy = local->hw.radiotap_timestamp.accuracy;
0578 flags |= IEEE80211_RADIOTAP_TIMESTAMP_FLAG_ACCURACY;
0579 }
0580 put_unaligned_le16(accuracy, pos);
0581 pos += sizeof(u16);
0582
0583 *pos++ = local->hw.radiotap_timestamp.units_pos;
0584 *pos++ = flags;
0585 }
0586
0587 if (status->encoding == RX_ENC_HE &&
0588 status->flag & RX_FLAG_RADIOTAP_HE) {
0589 #define HE_PREP(f, val) le16_encode_bits(val, IEEE80211_RADIOTAP_HE_##f)
0590
0591 if (status->enc_flags & RX_ENC_FLAG_STBC_MASK) {
0592 he.data6 |= HE_PREP(DATA6_NSTS,
0593 FIELD_GET(RX_ENC_FLAG_STBC_MASK,
0594 status->enc_flags));
0595 he.data3 |= HE_PREP(DATA3_STBC, 1);
0596 } else {
0597 he.data6 |= HE_PREP(DATA6_NSTS, status->nss);
0598 }
0599
0600 #define CHECK_GI(s) \
0601 BUILD_BUG_ON(IEEE80211_RADIOTAP_HE_DATA5_GI_##s != \
0602 (int)NL80211_RATE_INFO_HE_GI_##s)
0603
0604 CHECK_GI(0_8);
0605 CHECK_GI(1_6);
0606 CHECK_GI(3_2);
0607
0608 he.data3 |= HE_PREP(DATA3_DATA_MCS, status->rate_idx);
0609 he.data3 |= HE_PREP(DATA3_DATA_DCM, status->he_dcm);
0610 he.data3 |= HE_PREP(DATA3_CODING,
0611 !!(status->enc_flags & RX_ENC_FLAG_LDPC));
0612
0613 he.data5 |= HE_PREP(DATA5_GI, status->he_gi);
0614
0615 switch (status->bw) {
0616 case RATE_INFO_BW_20:
0617 he.data5 |= HE_PREP(DATA5_DATA_BW_RU_ALLOC,
0618 IEEE80211_RADIOTAP_HE_DATA5_DATA_BW_RU_ALLOC_20MHZ);
0619 break;
0620 case RATE_INFO_BW_40:
0621 he.data5 |= HE_PREP(DATA5_DATA_BW_RU_ALLOC,
0622 IEEE80211_RADIOTAP_HE_DATA5_DATA_BW_RU_ALLOC_40MHZ);
0623 break;
0624 case RATE_INFO_BW_80:
0625 he.data5 |= HE_PREP(DATA5_DATA_BW_RU_ALLOC,
0626 IEEE80211_RADIOTAP_HE_DATA5_DATA_BW_RU_ALLOC_80MHZ);
0627 break;
0628 case RATE_INFO_BW_160:
0629 he.data5 |= HE_PREP(DATA5_DATA_BW_RU_ALLOC,
0630 IEEE80211_RADIOTAP_HE_DATA5_DATA_BW_RU_ALLOC_160MHZ);
0631 break;
0632 case RATE_INFO_BW_HE_RU:
0633 #define CHECK_RU_ALLOC(s) \
0634 BUILD_BUG_ON(IEEE80211_RADIOTAP_HE_DATA5_DATA_BW_RU_ALLOC_##s##T != \
0635 NL80211_RATE_INFO_HE_RU_ALLOC_##s + 4)
0636
0637 CHECK_RU_ALLOC(26);
0638 CHECK_RU_ALLOC(52);
0639 CHECK_RU_ALLOC(106);
0640 CHECK_RU_ALLOC(242);
0641 CHECK_RU_ALLOC(484);
0642 CHECK_RU_ALLOC(996);
0643 CHECK_RU_ALLOC(2x996);
0644
0645 he.data5 |= HE_PREP(DATA5_DATA_BW_RU_ALLOC,
0646 status->he_ru + 4);
0647 break;
0648 default:
0649 WARN_ONCE(1, "Invalid SU BW %d\n", status->bw);
0650 }
0651
0652
0653 while ((pos - (u8 *)rthdr) & 1)
0654 pos++;
0655 rthdr->it_present |= cpu_to_le32(BIT(IEEE80211_RADIOTAP_HE));
0656 memcpy(pos, &he, sizeof(he));
0657 pos += sizeof(he);
0658 }
0659
0660 if (status->encoding == RX_ENC_HE &&
0661 status->flag & RX_FLAG_RADIOTAP_HE_MU) {
0662
0663 while ((pos - (u8 *)rthdr) & 1)
0664 pos++;
0665 rthdr->it_present |= cpu_to_le32(BIT(IEEE80211_RADIOTAP_HE_MU));
0666 memcpy(pos, &he_mu, sizeof(he_mu));
0667 pos += sizeof(he_mu);
0668 }
0669
0670 if (status->flag & RX_FLAG_NO_PSDU) {
0671 rthdr->it_present |=
0672 cpu_to_le32(BIT(IEEE80211_RADIOTAP_ZERO_LEN_PSDU));
0673 *pos++ = status->zero_length_psdu_type;
0674 }
0675
0676 if (status->flag & RX_FLAG_RADIOTAP_LSIG) {
0677
0678 while ((pos - (u8 *)rthdr) & 1)
0679 pos++;
0680 rthdr->it_present |= cpu_to_le32(BIT(IEEE80211_RADIOTAP_LSIG));
0681 memcpy(pos, &lsig, sizeof(lsig));
0682 pos += sizeof(lsig);
0683 }
0684
0685 for_each_set_bit(chain, &chains, IEEE80211_MAX_CHAINS) {
0686 *pos++ = status->chain_signal[chain];
0687 *pos++ = chain;
0688 }
0689
0690 if (status->flag & RX_FLAG_RADIOTAP_VENDOR_DATA) {
0691
0692 if ((pos - (u8 *)rthdr) & 1)
0693 *pos++ = 0;
0694 *pos++ = rtap.oui[0];
0695 *pos++ = rtap.oui[1];
0696 *pos++ = rtap.oui[2];
0697 *pos++ = rtap.subns;
0698 put_unaligned_le16(rtap.len, pos);
0699 pos += 2;
0700
0701 while ((pos - (u8 *)rthdr) & (rtap.align - 1))
0702 *pos++ = 0;
0703
0704 }
0705 }
0706
0707 static struct sk_buff *
0708 ieee80211_make_monitor_skb(struct ieee80211_local *local,
0709 struct sk_buff **origskb,
0710 struct ieee80211_rate *rate,
0711 int rtap_space, bool use_origskb)
0712 {
0713 struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(*origskb);
0714 int rt_hdrlen, needed_headroom;
0715 struct sk_buff *skb;
0716
0717
0718 rt_hdrlen = ieee80211_rx_radiotap_hdrlen(local, status, *origskb);
0719 needed_headroom = rt_hdrlen - rtap_space;
0720
0721 if (use_origskb) {
0722
0723 skb = *origskb;
0724 *origskb = NULL;
0725
0726
0727
0728
0729
0730
0731
0732
0733 if (skb_headroom(skb) < needed_headroom &&
0734 pskb_expand_head(skb, needed_headroom, 0, GFP_ATOMIC)) {
0735 dev_kfree_skb(skb);
0736 return NULL;
0737 }
0738 } else {
0739
0740
0741
0742
0743 skb = skb_copy_expand(*origskb, needed_headroom + NET_SKB_PAD,
0744 0, GFP_ATOMIC);
0745
0746 if (!skb)
0747 return NULL;
0748 }
0749
0750
0751 ieee80211_add_rx_radiotap_header(local, skb, rate, rt_hdrlen, true);
0752
0753 skb_reset_mac_header(skb);
0754 skb->ip_summed = CHECKSUM_UNNECESSARY;
0755 skb->pkt_type = PACKET_OTHERHOST;
0756 skb->protocol = htons(ETH_P_802_2);
0757
0758 return skb;
0759 }
0760
0761
0762
0763
0764
0765
0766 static struct sk_buff *
0767 ieee80211_rx_monitor(struct ieee80211_local *local, struct sk_buff *origskb,
0768 struct ieee80211_rate *rate)
0769 {
0770 struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(origskb);
0771 struct ieee80211_sub_if_data *sdata;
0772 struct sk_buff *monskb = NULL;
0773 int present_fcs_len = 0;
0774 unsigned int rtap_space = 0;
0775 struct ieee80211_sub_if_data *monitor_sdata =
0776 rcu_dereference(local->monitor_sdata);
0777 bool only_monitor = false;
0778 unsigned int min_head_len;
0779
0780 if (status->flag & RX_FLAG_RADIOTAP_HE)
0781 rtap_space += sizeof(struct ieee80211_radiotap_he);
0782
0783 if (status->flag & RX_FLAG_RADIOTAP_HE_MU)
0784 rtap_space += sizeof(struct ieee80211_radiotap_he_mu);
0785
0786 if (status->flag & RX_FLAG_RADIOTAP_LSIG)
0787 rtap_space += sizeof(struct ieee80211_radiotap_lsig);
0788
0789 if (unlikely(status->flag & RX_FLAG_RADIOTAP_VENDOR_DATA)) {
0790 struct ieee80211_vendor_radiotap *rtap =
0791 (void *)(origskb->data + rtap_space);
0792
0793 rtap_space += sizeof(*rtap) + rtap->len + rtap->pad;
0794 }
0795
0796 min_head_len = rtap_space;
0797
0798
0799
0800
0801
0802
0803
0804
0805
0806
0807 if (!(status->flag & RX_FLAG_NO_PSDU)) {
0808 if (ieee80211_hw_check(&local->hw, RX_INCLUDES_FCS)) {
0809 if (unlikely(origskb->len <= FCS_LEN + rtap_space)) {
0810
0811 WARN_ON(1);
0812 dev_kfree_skb(origskb);
0813 return NULL;
0814 }
0815 present_fcs_len = FCS_LEN;
0816 }
0817
0818
0819 min_head_len += 2;
0820 }
0821
0822
0823 if (!pskb_may_pull(origskb, min_head_len)) {
0824 dev_kfree_skb(origskb);
0825 return NULL;
0826 }
0827
0828 only_monitor = should_drop_frame(origskb, present_fcs_len, rtap_space);
0829
0830 if (!local->monitors || (status->flag & RX_FLAG_SKIP_MONITOR)) {
0831 if (only_monitor) {
0832 dev_kfree_skb(origskb);
0833 return NULL;
0834 }
0835
0836 return ieee80211_clean_skb(origskb, present_fcs_len,
0837 rtap_space);
0838 }
0839
0840 ieee80211_handle_mu_mimo_mon(monitor_sdata, origskb, rtap_space);
0841
0842 list_for_each_entry_rcu(sdata, &local->mon_list, u.mntr.list) {
0843 bool last_monitor = list_is_last(&sdata->u.mntr.list,
0844 &local->mon_list);
0845
0846 if (!monskb)
0847 monskb = ieee80211_make_monitor_skb(local, &origskb,
0848 rate, rtap_space,
0849 only_monitor &&
0850 last_monitor);
0851
0852 if (monskb) {
0853 struct sk_buff *skb;
0854
0855 if (last_monitor) {
0856 skb = monskb;
0857 monskb = NULL;
0858 } else {
0859 skb = skb_clone(monskb, GFP_ATOMIC);
0860 }
0861
0862 if (skb) {
0863 skb->dev = sdata->dev;
0864 dev_sw_netstats_rx_add(skb->dev, skb->len);
0865 netif_receive_skb(skb);
0866 }
0867 }
0868
0869 if (last_monitor)
0870 break;
0871 }
0872
0873
0874 dev_kfree_skb(monskb);
0875
0876
0877 if (!origskb)
0878 return NULL;
0879
0880 return ieee80211_clean_skb(origskb, present_fcs_len, rtap_space);
0881 }
0882
0883 static void ieee80211_parse_qos(struct ieee80211_rx_data *rx)
0884 {
0885 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)rx->skb->data;
0886 struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(rx->skb);
0887 int tid, seqno_idx, security_idx;
0888
0889
0890 if (ieee80211_is_data_qos(hdr->frame_control)) {
0891 u8 *qc = ieee80211_get_qos_ctl(hdr);
0892
0893 tid = *qc & IEEE80211_QOS_CTL_TID_MASK;
0894 if (*qc & IEEE80211_QOS_CTL_A_MSDU_PRESENT)
0895 status->rx_flags |= IEEE80211_RX_AMSDU;
0896
0897 seqno_idx = tid;
0898 security_idx = tid;
0899 } else {
0900
0901
0902
0903
0904
0905
0906
0907
0908
0909
0910
0911 seqno_idx = IEEE80211_NUM_TIDS;
0912 security_idx = 0;
0913 if (ieee80211_is_mgmt(hdr->frame_control))
0914 security_idx = IEEE80211_NUM_TIDS;
0915 tid = 0;
0916 }
0917
0918 rx->seqno_idx = seqno_idx;
0919 rx->security_idx = security_idx;
0920
0921
0922 rx->skb->priority = (tid > 7) ? 0 : tid;
0923 }
0924
0925
0926
0927
0928
0929
0930
0931
0932
0933
0934
0935
0936
0937
0938
0939
0940
0941
0942
0943
0944
0945
0946
0947
0948
0949
0950 static void ieee80211_verify_alignment(struct ieee80211_rx_data *rx)
0951 {
0952 #ifdef CONFIG_MAC80211_VERBOSE_DEBUG
0953 WARN_ON_ONCE((unsigned long)rx->skb->data & 1);
0954 #endif
0955 }
0956
0957
0958
0959
0960 static int ieee80211_is_unicast_robust_mgmt_frame(struct sk_buff *skb)
0961 {
0962 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) skb->data;
0963
0964 if (is_multicast_ether_addr(hdr->addr1))
0965 return 0;
0966
0967 return ieee80211_is_robust_mgmt_frame(skb);
0968 }
0969
0970
0971 static int ieee80211_is_multicast_robust_mgmt_frame(struct sk_buff *skb)
0972 {
0973 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) skb->data;
0974
0975 if (!is_multicast_ether_addr(hdr->addr1))
0976 return 0;
0977
0978 return ieee80211_is_robust_mgmt_frame(skb);
0979 }
0980
0981
0982
0983 static int ieee80211_get_mmie_keyidx(struct sk_buff *skb)
0984 {
0985 struct ieee80211_mgmt *hdr = (struct ieee80211_mgmt *) skb->data;
0986 struct ieee80211_mmie *mmie;
0987 struct ieee80211_mmie_16 *mmie16;
0988
0989 if (skb->len < 24 + sizeof(*mmie) || !is_multicast_ether_addr(hdr->da))
0990 return -1;
0991
0992 if (!ieee80211_is_robust_mgmt_frame(skb) &&
0993 !ieee80211_is_beacon(hdr->frame_control))
0994 return -1;
0995
0996 mmie = (struct ieee80211_mmie *)
0997 (skb->data + skb->len - sizeof(*mmie));
0998 if (mmie->element_id == WLAN_EID_MMIE &&
0999 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
1012 static int ieee80211_get_keyid(struct sk_buff *skb)
1013 {
1014 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
1015 __le16 fc = hdr->frame_control;
1016 int hdrlen = ieee80211_hdrlen(fc);
1017 u8 keyid;
1018
1019
1020 if (unlikely(skb->len < hdrlen + IEEE80211_WEP_IV_LEN))
1021 return -EINVAL;
1022
1023 skb_copy_bits(skb, hdrlen + 3, &keyid, 1);
1024
1025 keyid >>= 6;
1026
1027 return keyid;
1028 }
1029
1030 static ieee80211_rx_result ieee80211_rx_mesh_check(struct ieee80211_rx_data *rx)
1031 {
1032 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)rx->skb->data;
1033 char *dev_addr = rx->sdata->vif.addr;
1034
1035 if (ieee80211_is_data(hdr->frame_control)) {
1036 if (is_multicast_ether_addr(hdr->addr1)) {
1037 if (ieee80211_has_tods(hdr->frame_control) ||
1038 !ieee80211_has_fromds(hdr->frame_control))
1039 return RX_DROP_MONITOR;
1040 if (ether_addr_equal(hdr->addr3, dev_addr))
1041 return RX_DROP_MONITOR;
1042 } else {
1043 if (!ieee80211_has_a4(hdr->frame_control))
1044 return RX_DROP_MONITOR;
1045 if (ether_addr_equal(hdr->addr4, dev_addr))
1046 return RX_DROP_MONITOR;
1047 }
1048 }
1049
1050
1051
1052
1053
1054 if (!rx->sta || sta_plink_state(rx->sta) != NL80211_PLINK_ESTAB) {
1055 struct ieee80211_mgmt *mgmt;
1056
1057 if (!ieee80211_is_mgmt(hdr->frame_control))
1058 return RX_DROP_MONITOR;
1059
1060 if (ieee80211_is_action(hdr->frame_control)) {
1061 u8 category;
1062
1063
1064 if (rx->skb->len < IEEE80211_MIN_ACTION_SIZE)
1065 return RX_DROP_MONITOR;
1066
1067 mgmt = (struct ieee80211_mgmt *)hdr;
1068 category = mgmt->u.action.category;
1069 if (category != WLAN_CATEGORY_MESH_ACTION &&
1070 category != WLAN_CATEGORY_SELF_PROTECTED)
1071 return RX_DROP_MONITOR;
1072 return RX_CONTINUE;
1073 }
1074
1075 if (ieee80211_is_probe_req(hdr->frame_control) ||
1076 ieee80211_is_probe_resp(hdr->frame_control) ||
1077 ieee80211_is_beacon(hdr->frame_control) ||
1078 ieee80211_is_auth(hdr->frame_control))
1079 return RX_CONTINUE;
1080
1081 return RX_DROP_MONITOR;
1082 }
1083
1084 return RX_CONTINUE;
1085 }
1086
1087 static inline bool ieee80211_rx_reorder_ready(struct tid_ampdu_rx *tid_agg_rx,
1088 int index)
1089 {
1090 struct sk_buff_head *frames = &tid_agg_rx->reorder_buf[index];
1091 struct sk_buff *tail = skb_peek_tail(frames);
1092 struct ieee80211_rx_status *status;
1093
1094 if (tid_agg_rx->reorder_buf_filtered & BIT_ULL(index))
1095 return true;
1096
1097 if (!tail)
1098 return false;
1099
1100 status = IEEE80211_SKB_RXCB(tail);
1101 if (status->flag & RX_FLAG_AMSDU_MORE)
1102 return false;
1103
1104 return true;
1105 }
1106
1107 static void ieee80211_release_reorder_frame(struct ieee80211_sub_if_data *sdata,
1108 struct tid_ampdu_rx *tid_agg_rx,
1109 int index,
1110 struct sk_buff_head *frames)
1111 {
1112 struct sk_buff_head *skb_list = &tid_agg_rx->reorder_buf[index];
1113 struct sk_buff *skb;
1114 struct ieee80211_rx_status *status;
1115
1116 lockdep_assert_held(&tid_agg_rx->reorder_lock);
1117
1118 if (skb_queue_empty(skb_list))
1119 goto no_frame;
1120
1121 if (!ieee80211_rx_reorder_ready(tid_agg_rx, index)) {
1122 __skb_queue_purge(skb_list);
1123 goto no_frame;
1124 }
1125
1126
1127 tid_agg_rx->stored_mpdu_num--;
1128 while ((skb = __skb_dequeue(skb_list))) {
1129 status = IEEE80211_SKB_RXCB(skb);
1130 status->rx_flags |= IEEE80211_RX_DEFERRED_RELEASE;
1131 __skb_queue_tail(frames, skb);
1132 }
1133
1134 no_frame:
1135 tid_agg_rx->reorder_buf_filtered &= ~BIT_ULL(index);
1136 tid_agg_rx->head_seq_num = ieee80211_sn_inc(tid_agg_rx->head_seq_num);
1137 }
1138
1139 static void ieee80211_release_reorder_frames(struct ieee80211_sub_if_data *sdata,
1140 struct tid_ampdu_rx *tid_agg_rx,
1141 u16 head_seq_num,
1142 struct sk_buff_head *frames)
1143 {
1144 int index;
1145
1146 lockdep_assert_held(&tid_agg_rx->reorder_lock);
1147
1148 while (ieee80211_sn_less(tid_agg_rx->head_seq_num, head_seq_num)) {
1149 index = tid_agg_rx->head_seq_num % tid_agg_rx->buf_size;
1150 ieee80211_release_reorder_frame(sdata, tid_agg_rx, index,
1151 frames);
1152 }
1153 }
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164 #define HT_RX_REORDER_BUF_TIMEOUT (HZ / 10)
1165
1166 static void ieee80211_sta_reorder_release(struct ieee80211_sub_if_data *sdata,
1167 struct tid_ampdu_rx *tid_agg_rx,
1168 struct sk_buff_head *frames)
1169 {
1170 int index, i, j;
1171
1172 lockdep_assert_held(&tid_agg_rx->reorder_lock);
1173
1174
1175 index = tid_agg_rx->head_seq_num % tid_agg_rx->buf_size;
1176 if (!ieee80211_rx_reorder_ready(tid_agg_rx, index) &&
1177 tid_agg_rx->stored_mpdu_num) {
1178
1179
1180
1181
1182 int skipped = 1;
1183 for (j = (index + 1) % tid_agg_rx->buf_size; j != index;
1184 j = (j + 1) % tid_agg_rx->buf_size) {
1185 if (!ieee80211_rx_reorder_ready(tid_agg_rx, j)) {
1186 skipped++;
1187 continue;
1188 }
1189 if (skipped &&
1190 !time_after(jiffies, tid_agg_rx->reorder_time[j] +
1191 HT_RX_REORDER_BUF_TIMEOUT))
1192 goto set_release_timer;
1193
1194
1195 for (i = (index + 1) % tid_agg_rx->buf_size; i != j;
1196 i = (i + 1) % tid_agg_rx->buf_size)
1197 __skb_queue_purge(&tid_agg_rx->reorder_buf[i]);
1198
1199 ht_dbg_ratelimited(sdata,
1200 "release an RX reorder frame due to timeout on earlier frames\n");
1201 ieee80211_release_reorder_frame(sdata, tid_agg_rx, j,
1202 frames);
1203
1204
1205
1206
1207 tid_agg_rx->head_seq_num =
1208 (tid_agg_rx->head_seq_num +
1209 skipped) & IEEE80211_SN_MASK;
1210 skipped = 0;
1211 }
1212 } else while (ieee80211_rx_reorder_ready(tid_agg_rx, index)) {
1213 ieee80211_release_reorder_frame(sdata, tid_agg_rx, index,
1214 frames);
1215 index = tid_agg_rx->head_seq_num % tid_agg_rx->buf_size;
1216 }
1217
1218 if (tid_agg_rx->stored_mpdu_num) {
1219 j = index = tid_agg_rx->head_seq_num % tid_agg_rx->buf_size;
1220
1221 for (; j != (index - 1) % tid_agg_rx->buf_size;
1222 j = (j + 1) % tid_agg_rx->buf_size) {
1223 if (ieee80211_rx_reorder_ready(tid_agg_rx, j))
1224 break;
1225 }
1226
1227 set_release_timer:
1228
1229 if (!tid_agg_rx->removed)
1230 mod_timer(&tid_agg_rx->reorder_timer,
1231 tid_agg_rx->reorder_time[j] + 1 +
1232 HT_RX_REORDER_BUF_TIMEOUT);
1233 } else {
1234 del_timer(&tid_agg_rx->reorder_timer);
1235 }
1236 }
1237
1238
1239
1240
1241
1242
1243 static bool ieee80211_sta_manage_reorder_buf(struct ieee80211_sub_if_data *sdata,
1244 struct tid_ampdu_rx *tid_agg_rx,
1245 struct sk_buff *skb,
1246 struct sk_buff_head *frames)
1247 {
1248 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) skb->data;
1249 struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(skb);
1250 u16 sc = le16_to_cpu(hdr->seq_ctrl);
1251 u16 mpdu_seq_num = (sc & IEEE80211_SCTL_SEQ) >> 4;
1252 u16 head_seq_num, buf_size;
1253 int index;
1254 bool ret = true;
1255
1256 spin_lock(&tid_agg_rx->reorder_lock);
1257
1258
1259
1260
1261
1262 if (unlikely(tid_agg_rx->auto_seq)) {
1263 tid_agg_rx->auto_seq = false;
1264 tid_agg_rx->ssn = mpdu_seq_num;
1265 tid_agg_rx->head_seq_num = mpdu_seq_num;
1266 }
1267
1268 buf_size = tid_agg_rx->buf_size;
1269 head_seq_num = tid_agg_rx->head_seq_num;
1270
1271
1272
1273
1274
1275 if (unlikely(!tid_agg_rx->started)) {
1276 if (ieee80211_sn_less(mpdu_seq_num, head_seq_num)) {
1277 ret = false;
1278 goto out;
1279 }
1280 tid_agg_rx->started = true;
1281 }
1282
1283
1284 if (ieee80211_sn_less(mpdu_seq_num, head_seq_num)) {
1285 dev_kfree_skb(skb);
1286 goto out;
1287 }
1288
1289
1290
1291
1292
1293 if (!ieee80211_sn_less(mpdu_seq_num, head_seq_num + buf_size)) {
1294 head_seq_num = ieee80211_sn_inc(
1295 ieee80211_sn_sub(mpdu_seq_num, buf_size));
1296
1297 ieee80211_release_reorder_frames(sdata, tid_agg_rx,
1298 head_seq_num, frames);
1299 }
1300
1301
1302
1303 index = mpdu_seq_num % tid_agg_rx->buf_size;
1304
1305
1306 if (ieee80211_rx_reorder_ready(tid_agg_rx, index)) {
1307 dev_kfree_skb(skb);
1308 goto out;
1309 }
1310
1311
1312
1313
1314
1315
1316
1317 if (mpdu_seq_num == tid_agg_rx->head_seq_num &&
1318 tid_agg_rx->stored_mpdu_num == 0) {
1319 if (!(status->flag & RX_FLAG_AMSDU_MORE))
1320 tid_agg_rx->head_seq_num =
1321 ieee80211_sn_inc(tid_agg_rx->head_seq_num);
1322 ret = false;
1323 goto out;
1324 }
1325
1326
1327 __skb_queue_tail(&tid_agg_rx->reorder_buf[index], skb);
1328 if (!(status->flag & RX_FLAG_AMSDU_MORE)) {
1329 tid_agg_rx->reorder_time[index] = jiffies;
1330 tid_agg_rx->stored_mpdu_num++;
1331 ieee80211_sta_reorder_release(sdata, tid_agg_rx, frames);
1332 }
1333
1334 out:
1335 spin_unlock(&tid_agg_rx->reorder_lock);
1336 return ret;
1337 }
1338
1339
1340
1341
1342
1343 static void ieee80211_rx_reorder_ampdu(struct ieee80211_rx_data *rx,
1344 struct sk_buff_head *frames)
1345 {
1346 struct sk_buff *skb = rx->skb;
1347 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) skb->data;
1348 struct sta_info *sta = rx->sta;
1349 struct tid_ampdu_rx *tid_agg_rx;
1350 u16 sc;
1351 u8 tid, ack_policy;
1352
1353 if (!ieee80211_is_data_qos(hdr->frame_control) ||
1354 is_multicast_ether_addr(hdr->addr1))
1355 goto dont_reorder;
1356
1357
1358
1359
1360
1361
1362 if (!sta)
1363 goto dont_reorder;
1364
1365 ack_policy = *ieee80211_get_qos_ctl(hdr) &
1366 IEEE80211_QOS_CTL_ACK_POLICY_MASK;
1367 tid = ieee80211_get_tid(hdr);
1368
1369 tid_agg_rx = rcu_dereference(sta->ampdu_mlme.tid_rx[tid]);
1370 if (!tid_agg_rx) {
1371 if (ack_policy == IEEE80211_QOS_CTL_ACK_POLICY_BLOCKACK &&
1372 !test_bit(tid, rx->sta->ampdu_mlme.agg_session_valid) &&
1373 !test_and_set_bit(tid, rx->sta->ampdu_mlme.unexpected_agg))
1374 ieee80211_send_delba(rx->sdata, rx->sta->sta.addr, tid,
1375 WLAN_BACK_RECIPIENT,
1376 WLAN_REASON_QSTA_REQUIRE_SETUP);
1377 goto dont_reorder;
1378 }
1379
1380
1381 if (unlikely(hdr->frame_control & cpu_to_le16(IEEE80211_STYPE_NULLFUNC)))
1382 goto dont_reorder;
1383
1384
1385 if (ack_policy == IEEE80211_QOS_CTL_ACK_POLICY_NOACK)
1386 goto dont_reorder;
1387
1388
1389
1390
1391 if (tid_agg_rx->timeout)
1392 tid_agg_rx->last_rx = jiffies;
1393
1394
1395 sc = le16_to_cpu(hdr->seq_ctrl);
1396 if (sc & IEEE80211_SCTL_FRAG) {
1397 ieee80211_queue_skb_to_iface(rx->sdata, NULL, skb);
1398 return;
1399 }
1400
1401
1402
1403
1404
1405
1406
1407
1408 if (ieee80211_sta_manage_reorder_buf(rx->sdata, tid_agg_rx, skb,
1409 frames))
1410 return;
1411
1412 dont_reorder:
1413 __skb_queue_tail(frames, skb);
1414 }
1415
1416 static ieee80211_rx_result debug_noinline
1417 ieee80211_rx_h_check_dup(struct ieee80211_rx_data *rx)
1418 {
1419 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)rx->skb->data;
1420 struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(rx->skb);
1421
1422 if (status->flag & RX_FLAG_DUP_VALIDATED)
1423 return RX_CONTINUE;
1424
1425
1426
1427
1428
1429
1430 if (rx->skb->len < 24)
1431 return RX_CONTINUE;
1432
1433 if (ieee80211_is_ctl(hdr->frame_control) ||
1434 ieee80211_is_any_nullfunc(hdr->frame_control) ||
1435 is_multicast_ether_addr(hdr->addr1))
1436 return RX_CONTINUE;
1437
1438 if (!rx->sta)
1439 return RX_CONTINUE;
1440
1441 if (unlikely(ieee80211_has_retry(hdr->frame_control) &&
1442 rx->sta->last_seq_ctrl[rx->seqno_idx] == hdr->seq_ctrl)) {
1443 I802_DEBUG_INC(rx->local->dot11FrameDuplicateCount);
1444 rx->sta->deflink.rx_stats.num_duplicates++;
1445 return RX_DROP_UNUSABLE;
1446 } else if (!(status->flag & RX_FLAG_AMSDU_MORE)) {
1447 rx->sta->last_seq_ctrl[rx->seqno_idx] = hdr->seq_ctrl;
1448 }
1449
1450 return RX_CONTINUE;
1451 }
1452
1453 static ieee80211_rx_result debug_noinline
1454 ieee80211_rx_h_check(struct ieee80211_rx_data *rx)
1455 {
1456 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)rx->skb->data;
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467 if (ieee80211_vif_is_mesh(&rx->sdata->vif))
1468 return ieee80211_rx_mesh_check(rx);
1469
1470 if (unlikely((ieee80211_is_data(hdr->frame_control) ||
1471 ieee80211_is_pspoll(hdr->frame_control)) &&
1472 rx->sdata->vif.type != NL80211_IFTYPE_ADHOC &&
1473 rx->sdata->vif.type != NL80211_IFTYPE_OCB &&
1474 (!rx->sta || !test_sta_flag(rx->sta, WLAN_STA_ASSOC)))) {
1475
1476
1477
1478
1479
1480 if (rx->sta && rx->sdata->vif.type == NL80211_IFTYPE_STATION &&
1481 ieee80211_is_data_present(hdr->frame_control)) {
1482 unsigned int hdrlen;
1483 __be16 ethertype;
1484
1485 hdrlen = ieee80211_hdrlen(hdr->frame_control);
1486
1487 if (rx->skb->len < hdrlen + 8)
1488 return RX_DROP_MONITOR;
1489
1490 skb_copy_bits(rx->skb, hdrlen + 6, ðertype, 2);
1491 if (ethertype == rx->sdata->control_port_protocol)
1492 return RX_CONTINUE;
1493 }
1494
1495 if (rx->sdata->vif.type == NL80211_IFTYPE_AP &&
1496 cfg80211_rx_spurious_frame(rx->sdata->dev,
1497 hdr->addr2,
1498 GFP_ATOMIC))
1499 return RX_DROP_UNUSABLE;
1500
1501 return RX_DROP_MONITOR;
1502 }
1503
1504 return RX_CONTINUE;
1505 }
1506
1507
1508 static ieee80211_rx_result debug_noinline
1509 ieee80211_rx_h_check_more_data(struct ieee80211_rx_data *rx)
1510 {
1511 struct ieee80211_local *local;
1512 struct ieee80211_hdr *hdr;
1513 struct sk_buff *skb;
1514
1515 local = rx->local;
1516 skb = rx->skb;
1517 hdr = (struct ieee80211_hdr *) skb->data;
1518
1519 if (!local->pspolling)
1520 return RX_CONTINUE;
1521
1522 if (!ieee80211_has_fromds(hdr->frame_control))
1523
1524 return RX_CONTINUE;
1525
1526 if (!ieee80211_is_data(hdr->frame_control))
1527 return RX_CONTINUE;
1528
1529 if (!ieee80211_has_moredata(hdr->frame_control)) {
1530
1531 local->pspolling = false;
1532 return RX_CONTINUE;
1533 }
1534
1535
1536 ieee80211_send_pspoll(local, rx->sdata);
1537
1538 return RX_CONTINUE;
1539 }
1540
1541 static void sta_ps_start(struct sta_info *sta)
1542 {
1543 struct ieee80211_sub_if_data *sdata = sta->sdata;
1544 struct ieee80211_local *local = sdata->local;
1545 struct ps_data *ps;
1546 int tid;
1547
1548 if (sta->sdata->vif.type == NL80211_IFTYPE_AP ||
1549 sta->sdata->vif.type == NL80211_IFTYPE_AP_VLAN)
1550 ps = &sdata->bss->ps;
1551 else
1552 return;
1553
1554 atomic_inc(&ps->num_sta_ps);
1555 set_sta_flag(sta, WLAN_STA_PS_STA);
1556 if (!ieee80211_hw_check(&local->hw, AP_LINK_PS))
1557 drv_sta_notify(local, sdata, STA_NOTIFY_SLEEP, &sta->sta);
1558 ps_dbg(sdata, "STA %pM aid %d enters power save mode\n",
1559 sta->sta.addr, sta->sta.aid);
1560
1561 ieee80211_clear_fast_xmit(sta);
1562
1563 if (!sta->sta.txq[0])
1564 return;
1565
1566 for (tid = 0; tid < IEEE80211_NUM_TIDS; tid++) {
1567 struct ieee80211_txq *txq = sta->sta.txq[tid];
1568 struct txq_info *txqi = to_txq_info(txq);
1569
1570 spin_lock(&local->active_txq_lock[txq->ac]);
1571 if (!list_empty(&txqi->schedule_order))
1572 list_del_init(&txqi->schedule_order);
1573 spin_unlock(&local->active_txq_lock[txq->ac]);
1574
1575 if (txq_has_queue(txq))
1576 set_bit(tid, &sta->txq_buffered_tids);
1577 else
1578 clear_bit(tid, &sta->txq_buffered_tids);
1579 }
1580 }
1581
1582 static void sta_ps_end(struct sta_info *sta)
1583 {
1584 ps_dbg(sta->sdata, "STA %pM aid %d exits power save mode\n",
1585 sta->sta.addr, sta->sta.aid);
1586
1587 if (test_sta_flag(sta, WLAN_STA_PS_DRIVER)) {
1588
1589
1590
1591
1592
1593
1594 clear_sta_flag(sta, WLAN_STA_PS_STA);
1595 ps_dbg(sta->sdata, "STA %pM aid %d driver-ps-blocked\n",
1596 sta->sta.addr, sta->sta.aid);
1597 return;
1598 }
1599
1600 set_sta_flag(sta, WLAN_STA_PS_DELIVER);
1601 clear_sta_flag(sta, WLAN_STA_PS_STA);
1602 ieee80211_sta_ps_deliver_wakeup(sta);
1603 }
1604
1605 int ieee80211_sta_ps_transition(struct ieee80211_sta *pubsta, bool start)
1606 {
1607 struct sta_info *sta = container_of(pubsta, struct sta_info, sta);
1608 bool in_ps;
1609
1610 WARN_ON(!ieee80211_hw_check(&sta->local->hw, AP_LINK_PS));
1611
1612
1613 in_ps = test_sta_flag(sta, WLAN_STA_PS_STA);
1614 if ((start && in_ps) || (!start && !in_ps))
1615 return -EINVAL;
1616
1617 if (start)
1618 sta_ps_start(sta);
1619 else
1620 sta_ps_end(sta);
1621
1622 return 0;
1623 }
1624 EXPORT_SYMBOL(ieee80211_sta_ps_transition);
1625
1626 void ieee80211_sta_pspoll(struct ieee80211_sta *pubsta)
1627 {
1628 struct sta_info *sta = container_of(pubsta, struct sta_info, sta);
1629
1630 if (test_sta_flag(sta, WLAN_STA_SP))
1631 return;
1632
1633 if (!test_sta_flag(sta, WLAN_STA_PS_DRIVER))
1634 ieee80211_sta_ps_deliver_poll_response(sta);
1635 else
1636 set_sta_flag(sta, WLAN_STA_PSPOLL);
1637 }
1638 EXPORT_SYMBOL(ieee80211_sta_pspoll);
1639
1640 void ieee80211_sta_uapsd_trigger(struct ieee80211_sta *pubsta, u8 tid)
1641 {
1642 struct sta_info *sta = container_of(pubsta, struct sta_info, sta);
1643 int ac = ieee80211_ac_from_tid(tid);
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653 if (!(sta->sta.uapsd_queues & ieee80211_ac_to_qos_mask[ac]) &&
1654 tid != IEEE80211_NUM_TIDS)
1655 return;
1656
1657
1658 if (test_sta_flag(sta, WLAN_STA_SP))
1659 return;
1660
1661 if (!test_sta_flag(sta, WLAN_STA_PS_DRIVER))
1662 ieee80211_sta_ps_deliver_uapsd(sta);
1663 else
1664 set_sta_flag(sta, WLAN_STA_UAPSD);
1665 }
1666 EXPORT_SYMBOL(ieee80211_sta_uapsd_trigger);
1667
1668 static ieee80211_rx_result debug_noinline
1669 ieee80211_rx_h_uapsd_and_pspoll(struct ieee80211_rx_data *rx)
1670 {
1671 struct ieee80211_sub_if_data *sdata = rx->sdata;
1672 struct ieee80211_hdr *hdr = (void *)rx->skb->data;
1673 struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(rx->skb);
1674
1675 if (!rx->sta)
1676 return RX_CONTINUE;
1677
1678 if (sdata->vif.type != NL80211_IFTYPE_AP &&
1679 sdata->vif.type != NL80211_IFTYPE_AP_VLAN)
1680 return RX_CONTINUE;
1681
1682
1683
1684
1685
1686
1687 if (ieee80211_hw_check(&sdata->local->hw, AP_LINK_PS))
1688 return RX_CONTINUE;
1689
1690
1691
1692
1693
1694
1695 if (!test_sta_flag(rx->sta, WLAN_STA_PS_STA))
1696 return RX_CONTINUE;
1697
1698 if (unlikely(ieee80211_is_pspoll(hdr->frame_control))) {
1699 ieee80211_sta_pspoll(&rx->sta->sta);
1700
1701
1702
1703 dev_kfree_skb(rx->skb);
1704
1705 return RX_QUEUED;
1706 } else if (!ieee80211_has_morefrags(hdr->frame_control) &&
1707 !(status->rx_flags & IEEE80211_RX_DEFERRED_RELEASE) &&
1708 ieee80211_has_pm(hdr->frame_control) &&
1709 (ieee80211_is_data_qos(hdr->frame_control) ||
1710 ieee80211_is_qos_nullfunc(hdr->frame_control))) {
1711 u8 tid = ieee80211_get_tid(hdr);
1712
1713 ieee80211_sta_uapsd_trigger(&rx->sta->sta, tid);
1714 }
1715
1716 return RX_CONTINUE;
1717 }
1718
1719 static ieee80211_rx_result debug_noinline
1720 ieee80211_rx_h_sta_process(struct ieee80211_rx_data *rx)
1721 {
1722 struct sta_info *sta = rx->sta;
1723 struct sk_buff *skb = rx->skb;
1724 struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(skb);
1725 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
1726 int i;
1727
1728 if (!sta)
1729 return RX_CONTINUE;
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739 if (rx->sdata->vif.type == NL80211_IFTYPE_ADHOC) {
1740 u8 *bssid = ieee80211_get_bssid(hdr, rx->skb->len,
1741 NL80211_IFTYPE_ADHOC);
1742 if (ether_addr_equal(bssid, rx->sdata->u.ibss.bssid) &&
1743 test_sta_flag(sta, WLAN_STA_AUTHORIZED)) {
1744 sta->deflink.rx_stats.last_rx = jiffies;
1745 if (ieee80211_is_data(hdr->frame_control) &&
1746 !is_multicast_ether_addr(hdr->addr1))
1747 sta->deflink.rx_stats.last_rate =
1748 sta_stats_encode_rate(status);
1749 }
1750 } else if (rx->sdata->vif.type == NL80211_IFTYPE_OCB) {
1751 sta->deflink.rx_stats.last_rx = jiffies;
1752 } else if (!ieee80211_is_s1g_beacon(hdr->frame_control) &&
1753 !is_multicast_ether_addr(hdr->addr1)) {
1754
1755
1756
1757
1758 sta->deflink.rx_stats.last_rx = jiffies;
1759 if (ieee80211_is_data(hdr->frame_control))
1760 sta->deflink.rx_stats.last_rate = sta_stats_encode_rate(status);
1761 }
1762
1763 sta->deflink.rx_stats.fragments++;
1764
1765 u64_stats_update_begin(&rx->sta->deflink.rx_stats.syncp);
1766 sta->deflink.rx_stats.bytes += rx->skb->len;
1767 u64_stats_update_end(&rx->sta->deflink.rx_stats.syncp);
1768
1769 if (!(status->flag & RX_FLAG_NO_SIGNAL_VAL)) {
1770 sta->deflink.rx_stats.last_signal = status->signal;
1771 ewma_signal_add(&sta->deflink.rx_stats_avg.signal,
1772 -status->signal);
1773 }
1774
1775 if (status->chains) {
1776 sta->deflink.rx_stats.chains = status->chains;
1777 for (i = 0; i < ARRAY_SIZE(status->chain_signal); i++) {
1778 int signal = status->chain_signal[i];
1779
1780 if (!(status->chains & BIT(i)))
1781 continue;
1782
1783 sta->deflink.rx_stats.chain_signal_last[i] = signal;
1784 ewma_signal_add(&sta->deflink.rx_stats_avg.chain_signal[i],
1785 -signal);
1786 }
1787 }
1788
1789 if (ieee80211_is_s1g_beacon(hdr->frame_control))
1790 return RX_CONTINUE;
1791
1792
1793
1794
1795
1796
1797 if (!ieee80211_hw_check(&sta->local->hw, AP_LINK_PS) &&
1798 !ieee80211_has_morefrags(hdr->frame_control) &&
1799 !is_multicast_ether_addr(hdr->addr1) &&
1800 (ieee80211_is_mgmt(hdr->frame_control) ||
1801 ieee80211_is_data(hdr->frame_control)) &&
1802 !(status->rx_flags & IEEE80211_RX_DEFERRED_RELEASE) &&
1803 (rx->sdata->vif.type == NL80211_IFTYPE_AP ||
1804 rx->sdata->vif.type == NL80211_IFTYPE_AP_VLAN)) {
1805 if (test_sta_flag(sta, WLAN_STA_PS_STA)) {
1806 if (!ieee80211_has_pm(hdr->frame_control))
1807 sta_ps_end(sta);
1808 } else {
1809 if (ieee80211_has_pm(hdr->frame_control))
1810 sta_ps_start(sta);
1811 }
1812 }
1813
1814
1815 if (ieee80211_vif_is_mesh(&rx->sdata->vif))
1816 ieee80211_mps_rx_h_sta_process(sta, hdr);
1817
1818
1819
1820
1821
1822 if (ieee80211_is_any_nullfunc(hdr->frame_control)) {
1823 I802_DEBUG_INC(rx->local->rx_handlers_drop_nullfunc);
1824
1825
1826
1827
1828
1829
1830
1831 if (ieee80211_has_a4(hdr->frame_control) &&
1832 (rx->sdata->vif.type == NL80211_IFTYPE_AP ||
1833 (rx->sdata->vif.type == NL80211_IFTYPE_AP_VLAN &&
1834 !rx->sdata->u.vlan.sta))) {
1835 if (!test_and_set_sta_flag(sta, WLAN_STA_4ADDR_EVENT))
1836 cfg80211_rx_unexpected_4addr_frame(
1837 rx->sdata->dev, sta->sta.addr,
1838 GFP_ATOMIC);
1839 return RX_DROP_MONITOR;
1840 }
1841
1842
1843
1844
1845 sta->deflink.rx_stats.packets++;
1846 dev_kfree_skb(rx->skb);
1847 return RX_QUEUED;
1848 }
1849
1850 return RX_CONTINUE;
1851 }
1852
1853 static struct ieee80211_key *
1854 ieee80211_rx_get_bigtk(struct ieee80211_rx_data *rx, int idx)
1855 {
1856 struct ieee80211_key *key = NULL;
1857 struct ieee80211_sub_if_data *sdata = rx->sdata;
1858 int idx2;
1859
1860
1861
1862
1863
1864
1865
1866 if (idx < 0) {
1867 idx = NUM_DEFAULT_KEYS + NUM_DEFAULT_MGMT_KEYS;
1868 idx2 = idx + 1;
1869 } else {
1870 if (idx == NUM_DEFAULT_KEYS + NUM_DEFAULT_MGMT_KEYS)
1871 idx2 = idx + 1;
1872 else
1873 idx2 = idx - 1;
1874 }
1875
1876 if (rx->sta)
1877 key = rcu_dereference(rx->sta->deflink.gtk[idx]);
1878 if (!key)
1879 key = rcu_dereference(sdata->deflink.gtk[idx]);
1880 if (!key && rx->sta)
1881 key = rcu_dereference(rx->sta->deflink.gtk[idx2]);
1882 if (!key)
1883 key = rcu_dereference(sdata->deflink.gtk[idx2]);
1884
1885 return key;
1886 }
1887
1888 static ieee80211_rx_result debug_noinline
1889 ieee80211_rx_h_decrypt(struct ieee80211_rx_data *rx)
1890 {
1891 struct sk_buff *skb = rx->skb;
1892 struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(skb);
1893 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
1894 int keyidx;
1895 ieee80211_rx_result result = RX_DROP_UNUSABLE;
1896 struct ieee80211_key *sta_ptk = NULL;
1897 struct ieee80211_key *ptk_idx = NULL;
1898 int mmie_keyidx = -1;
1899 __le16 fc;
1900
1901 if (ieee80211_is_ext(hdr->frame_control))
1902 return RX_CONTINUE;
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933 rx->key = NULL;
1934 fc = hdr->frame_control;
1935
1936 if (rx->sta) {
1937 int keyid = rx->sta->ptk_idx;
1938 sta_ptk = rcu_dereference(rx->sta->ptk[keyid]);
1939
1940 if (ieee80211_has_protected(fc) &&
1941 !(status->flag & RX_FLAG_IV_STRIPPED)) {
1942 keyid = ieee80211_get_keyid(rx->skb);
1943
1944 if (unlikely(keyid < 0))
1945 return RX_DROP_UNUSABLE;
1946
1947 ptk_idx = rcu_dereference(rx->sta->ptk[keyid]);
1948 }
1949 }
1950
1951 if (!ieee80211_has_protected(fc))
1952 mmie_keyidx = ieee80211_get_mmie_keyidx(rx->skb);
1953
1954 if (!is_multicast_ether_addr(hdr->addr1) && sta_ptk) {
1955 rx->key = ptk_idx ? ptk_idx : sta_ptk;
1956 if ((status->flag & RX_FLAG_DECRYPTED) &&
1957 (status->flag & RX_FLAG_IV_STRIPPED))
1958 return RX_CONTINUE;
1959
1960 if (!ieee80211_has_protected(fc))
1961 return RX_CONTINUE;
1962 } else if (mmie_keyidx >= 0 && ieee80211_is_beacon(fc)) {
1963
1964 if ((status->flag & RX_FLAG_DECRYPTED) &&
1965 (status->flag & RX_FLAG_IV_STRIPPED))
1966 return RX_CONTINUE;
1967
1968 if (mmie_keyidx < NUM_DEFAULT_KEYS + NUM_DEFAULT_MGMT_KEYS ||
1969 mmie_keyidx >= NUM_DEFAULT_KEYS + NUM_DEFAULT_MGMT_KEYS +
1970 NUM_DEFAULT_BEACON_KEYS) {
1971 cfg80211_rx_unprot_mlme_mgmt(rx->sdata->dev,
1972 skb->data,
1973 skb->len);
1974 return RX_DROP_MONITOR;
1975 }
1976
1977 rx->key = ieee80211_rx_get_bigtk(rx, mmie_keyidx);
1978 if (!rx->key)
1979 return RX_CONTINUE;
1980 } else if (mmie_keyidx >= 0) {
1981
1982 if ((status->flag & RX_FLAG_DECRYPTED) &&
1983 (status->flag & RX_FLAG_IV_STRIPPED))
1984 return RX_CONTINUE;
1985
1986 if (mmie_keyidx < NUM_DEFAULT_KEYS ||
1987 mmie_keyidx >= NUM_DEFAULT_KEYS + NUM_DEFAULT_MGMT_KEYS)
1988 return RX_DROP_MONITOR;
1989 if (rx->sta) {
1990 if (ieee80211_is_group_privacy_action(skb) &&
1991 test_sta_flag(rx->sta, WLAN_STA_MFP))
1992 return RX_DROP_MONITOR;
1993
1994 rx->key = rcu_dereference(rx->sta->deflink.gtk[mmie_keyidx]);
1995 }
1996 if (!rx->key)
1997 rx->key = rcu_dereference(rx->sdata->deflink.gtk[mmie_keyidx]);
1998 } else if (!ieee80211_has_protected(fc)) {
1999
2000
2001
2002
2003
2004
2005 struct ieee80211_key *key = NULL;
2006 struct ieee80211_sub_if_data *sdata = rx->sdata;
2007 int i;
2008
2009 if (ieee80211_is_beacon(fc)) {
2010 key = ieee80211_rx_get_bigtk(rx, -1);
2011 } else if (ieee80211_is_mgmt(fc) &&
2012 is_multicast_ether_addr(hdr->addr1)) {
2013 key = rcu_dereference(rx->sdata->deflink.default_mgmt_key);
2014 } else {
2015 if (rx->sta) {
2016 for (i = 0; i < NUM_DEFAULT_KEYS; i++) {
2017 key = rcu_dereference(rx->sta->deflink.gtk[i]);
2018 if (key)
2019 break;
2020 }
2021 }
2022 if (!key) {
2023 for (i = 0; i < NUM_DEFAULT_KEYS; i++) {
2024 key = rcu_dereference(sdata->deflink.gtk[i]);
2025 if (key)
2026 break;
2027 }
2028 }
2029 }
2030 if (key)
2031 rx->key = key;
2032 return RX_CONTINUE;
2033 } else {
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043 if ((status->flag & RX_FLAG_DECRYPTED) &&
2044 (status->flag & RX_FLAG_IV_STRIPPED))
2045 return RX_CONTINUE;
2046
2047 keyidx = ieee80211_get_keyid(rx->skb);
2048
2049 if (unlikely(keyidx < 0))
2050 return RX_DROP_UNUSABLE;
2051
2052
2053 if (is_multicast_ether_addr(hdr->addr1) && rx->sta)
2054 rx->key = rcu_dereference(rx->sta->deflink.gtk[keyidx]);
2055
2056
2057 if (!rx->key) {
2058 if (is_multicast_ether_addr(hdr->addr1))
2059 rx->key = rcu_dereference(rx->sdata->deflink.gtk[keyidx]);
2060 if (!rx->key)
2061 rx->key = rcu_dereference(rx->sdata->keys[keyidx]);
2062
2063
2064
2065
2066
2067
2068 if (rx->key &&
2069 rx->key->conf.cipher != WLAN_CIPHER_SUITE_WEP40 &&
2070 rx->key->conf.cipher != WLAN_CIPHER_SUITE_WEP104 &&
2071 !is_multicast_ether_addr(hdr->addr1))
2072 rx->key = NULL;
2073 }
2074 }
2075
2076 if (rx->key) {
2077 if (unlikely(rx->key->flags & KEY_FLAG_TAINTED))
2078 return RX_DROP_MONITOR;
2079
2080
2081 } else {
2082 return RX_DROP_MONITOR;
2083 }
2084
2085 switch (rx->key->conf.cipher) {
2086 case WLAN_CIPHER_SUITE_WEP40:
2087 case WLAN_CIPHER_SUITE_WEP104:
2088 result = ieee80211_crypto_wep_decrypt(rx);
2089 break;
2090 case WLAN_CIPHER_SUITE_TKIP:
2091 result = ieee80211_crypto_tkip_decrypt(rx);
2092 break;
2093 case WLAN_CIPHER_SUITE_CCMP:
2094 result = ieee80211_crypto_ccmp_decrypt(
2095 rx, IEEE80211_CCMP_MIC_LEN);
2096 break;
2097 case WLAN_CIPHER_SUITE_CCMP_256:
2098 result = ieee80211_crypto_ccmp_decrypt(
2099 rx, IEEE80211_CCMP_256_MIC_LEN);
2100 break;
2101 case WLAN_CIPHER_SUITE_AES_CMAC:
2102 result = ieee80211_crypto_aes_cmac_decrypt(rx);
2103 break;
2104 case WLAN_CIPHER_SUITE_BIP_CMAC_256:
2105 result = ieee80211_crypto_aes_cmac_256_decrypt(rx);
2106 break;
2107 case WLAN_CIPHER_SUITE_BIP_GMAC_128:
2108 case WLAN_CIPHER_SUITE_BIP_GMAC_256:
2109 result = ieee80211_crypto_aes_gmac_decrypt(rx);
2110 break;
2111 case WLAN_CIPHER_SUITE_GCMP:
2112 case WLAN_CIPHER_SUITE_GCMP_256:
2113 result = ieee80211_crypto_gcmp_decrypt(rx);
2114 break;
2115 default:
2116 result = RX_DROP_UNUSABLE;
2117 }
2118
2119
2120
2121
2122 status->flag |= RX_FLAG_DECRYPTED;
2123
2124 if (unlikely(ieee80211_is_beacon(fc) && result == RX_DROP_UNUSABLE))
2125 cfg80211_rx_unprot_mlme_mgmt(rx->sdata->dev,
2126 skb->data, skb->len);
2127
2128 return result;
2129 }
2130
2131 void ieee80211_init_frag_cache(struct ieee80211_fragment_cache *cache)
2132 {
2133 int i;
2134
2135 for (i = 0; i < ARRAY_SIZE(cache->entries); i++)
2136 skb_queue_head_init(&cache->entries[i].skb_list);
2137 }
2138
2139 void ieee80211_destroy_frag_cache(struct ieee80211_fragment_cache *cache)
2140 {
2141 int i;
2142
2143 for (i = 0; i < ARRAY_SIZE(cache->entries); i++)
2144 __skb_queue_purge(&cache->entries[i].skb_list);
2145 }
2146
2147 static inline struct ieee80211_fragment_entry *
2148 ieee80211_reassemble_add(struct ieee80211_fragment_cache *cache,
2149 unsigned int frag, unsigned int seq, int rx_queue,
2150 struct sk_buff **skb)
2151 {
2152 struct ieee80211_fragment_entry *entry;
2153
2154 entry = &cache->entries[cache->next++];
2155 if (cache->next >= IEEE80211_FRAGMENT_MAX)
2156 cache->next = 0;
2157
2158 __skb_queue_purge(&entry->skb_list);
2159
2160 __skb_queue_tail(&entry->skb_list, *skb);
2161 *skb = NULL;
2162 entry->first_frag_time = jiffies;
2163 entry->seq = seq;
2164 entry->rx_queue = rx_queue;
2165 entry->last_frag = frag;
2166 entry->check_sequential_pn = false;
2167 entry->extra_len = 0;
2168
2169 return entry;
2170 }
2171
2172 static inline struct ieee80211_fragment_entry *
2173 ieee80211_reassemble_find(struct ieee80211_fragment_cache *cache,
2174 unsigned int frag, unsigned int seq,
2175 int rx_queue, struct ieee80211_hdr *hdr)
2176 {
2177 struct ieee80211_fragment_entry *entry;
2178 int i, idx;
2179
2180 idx = cache->next;
2181 for (i = 0; i < IEEE80211_FRAGMENT_MAX; i++) {
2182 struct ieee80211_hdr *f_hdr;
2183 struct sk_buff *f_skb;
2184
2185 idx--;
2186 if (idx < 0)
2187 idx = IEEE80211_FRAGMENT_MAX - 1;
2188
2189 entry = &cache->entries[idx];
2190 if (skb_queue_empty(&entry->skb_list) || entry->seq != seq ||
2191 entry->rx_queue != rx_queue ||
2192 entry->last_frag + 1 != frag)
2193 continue;
2194
2195 f_skb = __skb_peek(&entry->skb_list);
2196 f_hdr = (struct ieee80211_hdr *) f_skb->data;
2197
2198
2199
2200
2201 if (((hdr->frame_control ^ f_hdr->frame_control) &
2202 cpu_to_le16(IEEE80211_FCTL_FTYPE)) ||
2203 !ether_addr_equal(hdr->addr1, f_hdr->addr1) ||
2204 !ether_addr_equal(hdr->addr2, f_hdr->addr2))
2205 continue;
2206
2207 if (time_after(jiffies, entry->first_frag_time + 2 * HZ)) {
2208 __skb_queue_purge(&entry->skb_list);
2209 continue;
2210 }
2211 return entry;
2212 }
2213
2214 return NULL;
2215 }
2216
2217 static bool requires_sequential_pn(struct ieee80211_rx_data *rx, __le16 fc)
2218 {
2219 return rx->key &&
2220 (rx->key->conf.cipher == WLAN_CIPHER_SUITE_CCMP ||
2221 rx->key->conf.cipher == WLAN_CIPHER_SUITE_CCMP_256 ||
2222 rx->key->conf.cipher == WLAN_CIPHER_SUITE_GCMP ||
2223 rx->key->conf.cipher == WLAN_CIPHER_SUITE_GCMP_256) &&
2224 ieee80211_has_protected(fc);
2225 }
2226
2227 static ieee80211_rx_result debug_noinline
2228 ieee80211_rx_h_defragment(struct ieee80211_rx_data *rx)
2229 {
2230 struct ieee80211_fragment_cache *cache = &rx->sdata->frags;
2231 struct ieee80211_hdr *hdr;
2232 u16 sc;
2233 __le16 fc;
2234 unsigned int frag, seq;
2235 struct ieee80211_fragment_entry *entry;
2236 struct sk_buff *skb;
2237 struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(rx->skb);
2238
2239 hdr = (struct ieee80211_hdr *)rx->skb->data;
2240 fc = hdr->frame_control;
2241
2242 if (ieee80211_is_ctl(fc) || ieee80211_is_ext(fc))
2243 return RX_CONTINUE;
2244
2245 sc = le16_to_cpu(hdr->seq_ctrl);
2246 frag = sc & IEEE80211_SCTL_FRAG;
2247
2248 if (rx->sta)
2249 cache = &rx->sta->frags;
2250
2251 if (likely(!ieee80211_has_morefrags(fc) && frag == 0))
2252 goto out;
2253
2254 if (is_multicast_ether_addr(hdr->addr1))
2255 return RX_DROP_MONITOR;
2256
2257 I802_DEBUG_INC(rx->local->rx_handlers_fragments);
2258
2259 if (skb_linearize(rx->skb))
2260 return RX_DROP_UNUSABLE;
2261
2262
2263
2264
2265
2266
2267 hdr = (struct ieee80211_hdr *)rx->skb->data;
2268 seq = (sc & IEEE80211_SCTL_SEQ) >> 4;
2269
2270 if (frag == 0) {
2271
2272 entry = ieee80211_reassemble_add(cache, frag, seq,
2273 rx->seqno_idx, &(rx->skb));
2274 if (requires_sequential_pn(rx, fc)) {
2275 int queue = rx->security_idx;
2276
2277
2278
2279
2280 entry->check_sequential_pn = true;
2281 entry->is_protected = true;
2282 entry->key_color = rx->key->color;
2283 memcpy(entry->last_pn,
2284 rx->key->u.ccmp.rx_pn[queue],
2285 IEEE80211_CCMP_PN_LEN);
2286 BUILD_BUG_ON(offsetof(struct ieee80211_key,
2287 u.ccmp.rx_pn) !=
2288 offsetof(struct ieee80211_key,
2289 u.gcmp.rx_pn));
2290 BUILD_BUG_ON(sizeof(rx->key->u.ccmp.rx_pn[queue]) !=
2291 sizeof(rx->key->u.gcmp.rx_pn[queue]));
2292 BUILD_BUG_ON(IEEE80211_CCMP_PN_LEN !=
2293 IEEE80211_GCMP_PN_LEN);
2294 } else if (rx->key &&
2295 (ieee80211_has_protected(fc) ||
2296 (status->flag & RX_FLAG_DECRYPTED))) {
2297 entry->is_protected = true;
2298 entry->key_color = rx->key->color;
2299 }
2300 return RX_QUEUED;
2301 }
2302
2303
2304
2305
2306 entry = ieee80211_reassemble_find(cache, frag, seq,
2307 rx->seqno_idx, hdr);
2308 if (!entry) {
2309 I802_DEBUG_INC(rx->local->rx_handlers_drop_defrag);
2310 return RX_DROP_MONITOR;
2311 }
2312
2313
2314
2315
2316
2317
2318 if (entry->check_sequential_pn) {
2319 int i;
2320 u8 pn[IEEE80211_CCMP_PN_LEN], *rpn;
2321
2322 if (!requires_sequential_pn(rx, fc))
2323 return RX_DROP_UNUSABLE;
2324
2325
2326 if (entry->key_color != rx->key->color)
2327 return RX_DROP_UNUSABLE;
2328
2329 memcpy(pn, entry->last_pn, IEEE80211_CCMP_PN_LEN);
2330 for (i = IEEE80211_CCMP_PN_LEN - 1; i >= 0; i--) {
2331 pn[i]++;
2332 if (pn[i])
2333 break;
2334 }
2335
2336 rpn = rx->ccm_gcm.pn;
2337 if (memcmp(pn, rpn, IEEE80211_CCMP_PN_LEN))
2338 return RX_DROP_UNUSABLE;
2339 memcpy(entry->last_pn, pn, IEEE80211_CCMP_PN_LEN);
2340 } else if (entry->is_protected &&
2341 (!rx->key ||
2342 (!ieee80211_has_protected(fc) &&
2343 !(status->flag & RX_FLAG_DECRYPTED)) ||
2344 rx->key->color != entry->key_color)) {
2345
2346
2347
2348
2349 return RX_DROP_UNUSABLE;
2350 } else if (entry->is_protected && rx->key &&
2351 entry->key_color != rx->key->color &&
2352 (status->flag & RX_FLAG_DECRYPTED)) {
2353 return RX_DROP_UNUSABLE;
2354 }
2355
2356 skb_pull(rx->skb, ieee80211_hdrlen(fc));
2357 __skb_queue_tail(&entry->skb_list, rx->skb);
2358 entry->last_frag = frag;
2359 entry->extra_len += rx->skb->len;
2360 if (ieee80211_has_morefrags(fc)) {
2361 rx->skb = NULL;
2362 return RX_QUEUED;
2363 }
2364
2365 rx->skb = __skb_dequeue(&entry->skb_list);
2366 if (skb_tailroom(rx->skb) < entry->extra_len) {
2367 I802_DEBUG_INC(rx->local->rx_expand_skb_head_defrag);
2368 if (unlikely(pskb_expand_head(rx->skb, 0, entry->extra_len,
2369 GFP_ATOMIC))) {
2370 I802_DEBUG_INC(rx->local->rx_handlers_drop_defrag);
2371 __skb_queue_purge(&entry->skb_list);
2372 return RX_DROP_UNUSABLE;
2373 }
2374 }
2375 while ((skb = __skb_dequeue(&entry->skb_list))) {
2376 skb_put_data(rx->skb, skb->data, skb->len);
2377 dev_kfree_skb(skb);
2378 }
2379
2380 out:
2381 ieee80211_led_rx(rx->local);
2382 if (rx->sta)
2383 rx->sta->deflink.rx_stats.packets++;
2384 return RX_CONTINUE;
2385 }
2386
2387 static int ieee80211_802_1x_port_control(struct ieee80211_rx_data *rx)
2388 {
2389 if (unlikely(!rx->sta || !test_sta_flag(rx->sta, WLAN_STA_AUTHORIZED)))
2390 return -EACCES;
2391
2392 return 0;
2393 }
2394
2395 static int ieee80211_drop_unencrypted(struct ieee80211_rx_data *rx, __le16 fc)
2396 {
2397 struct ieee80211_hdr *hdr = (void *)rx->skb->data;
2398 struct sk_buff *skb = rx->skb;
2399 struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(skb);
2400
2401
2402
2403
2404
2405 if (status->flag & RX_FLAG_DECRYPTED)
2406 return 0;
2407
2408
2409 if (unlikely(rx->sta && ieee80211_vif_is_mesh(&rx->sdata->vif) &&
2410 ieee80211_is_data(fc))) {
2411 struct ieee80211s_hdr *mesh_hdr;
2412 u16 hdr_len = ieee80211_hdrlen(fc);
2413 u16 ethertype_offset;
2414 __be16 ethertype;
2415
2416 if (!ether_addr_equal(hdr->addr1, rx->sdata->vif.addr))
2417 goto drop_check;
2418
2419
2420 if (!pskb_may_pull(rx->skb, hdr_len + 6))
2421 goto drop_check;
2422
2423 mesh_hdr = (struct ieee80211s_hdr *)(skb->data + hdr_len);
2424 ethertype_offset = hdr_len + ieee80211_get_mesh_hdrlen(mesh_hdr) +
2425 sizeof(rfc1042_header);
2426
2427 if (skb_copy_bits(rx->skb, ethertype_offset, ðertype, 2) == 0 &&
2428 ethertype == rx->sdata->control_port_protocol)
2429 return 0;
2430 }
2431
2432 drop_check:
2433
2434 if (unlikely(!ieee80211_has_protected(fc) &&
2435 !ieee80211_is_any_nullfunc(fc) &&
2436 ieee80211_is_data(fc) && rx->key))
2437 return -EACCES;
2438
2439 return 0;
2440 }
2441
2442 static int ieee80211_drop_unencrypted_mgmt(struct ieee80211_rx_data *rx)
2443 {
2444 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)rx->skb->data;
2445 struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(rx->skb);
2446 __le16 fc = hdr->frame_control;
2447
2448
2449
2450
2451
2452 if (status->flag & RX_FLAG_DECRYPTED)
2453 return 0;
2454
2455 if (rx->sta && test_sta_flag(rx->sta, WLAN_STA_MFP)) {
2456 if (unlikely(!ieee80211_has_protected(fc) &&
2457 ieee80211_is_unicast_robust_mgmt_frame(rx->skb) &&
2458 rx->key)) {
2459 if (ieee80211_is_deauth(fc) ||
2460 ieee80211_is_disassoc(fc))
2461 cfg80211_rx_unprot_mlme_mgmt(rx->sdata->dev,
2462 rx->skb->data,
2463 rx->skb->len);
2464 return -EACCES;
2465 }
2466
2467 if (unlikely(ieee80211_is_multicast_robust_mgmt_frame(rx->skb) &&
2468 ieee80211_get_mmie_keyidx(rx->skb) < 0)) {
2469 if (ieee80211_is_deauth(fc) ||
2470 ieee80211_is_disassoc(fc))
2471 cfg80211_rx_unprot_mlme_mgmt(rx->sdata->dev,
2472 rx->skb->data,
2473 rx->skb->len);
2474 return -EACCES;
2475 }
2476 if (unlikely(ieee80211_is_beacon(fc) && rx->key &&
2477 ieee80211_get_mmie_keyidx(rx->skb) < 0)) {
2478 cfg80211_rx_unprot_mlme_mgmt(rx->sdata->dev,
2479 rx->skb->data,
2480 rx->skb->len);
2481 return -EACCES;
2482 }
2483
2484
2485
2486
2487 if (unlikely(ieee80211_is_action(fc) && !rx->key &&
2488 ieee80211_is_robust_mgmt_frame(rx->skb)))
2489 return -EACCES;
2490 }
2491
2492 return 0;
2493 }
2494
2495 static int
2496 __ieee80211_data_to_8023(struct ieee80211_rx_data *rx, bool *port_control)
2497 {
2498 struct ieee80211_sub_if_data *sdata = rx->sdata;
2499 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)rx->skb->data;
2500 bool check_port_control = false;
2501 struct ethhdr *ehdr;
2502 int ret;
2503
2504 *port_control = false;
2505 if (ieee80211_has_a4(hdr->frame_control) &&
2506 sdata->vif.type == NL80211_IFTYPE_AP_VLAN && !sdata->u.vlan.sta)
2507 return -1;
2508
2509 if (sdata->vif.type == NL80211_IFTYPE_STATION &&
2510 !!sdata->u.mgd.use_4addr != !!ieee80211_has_a4(hdr->frame_control)) {
2511
2512 if (!sdata->u.mgd.use_4addr)
2513 return -1;
2514 else if (!ether_addr_equal(hdr->addr1, sdata->vif.addr))
2515 check_port_control = true;
2516 }
2517
2518 if (is_multicast_ether_addr(hdr->addr1) &&
2519 sdata->vif.type == NL80211_IFTYPE_AP_VLAN && sdata->u.vlan.sta)
2520 return -1;
2521
2522 ret = ieee80211_data_to_8023(rx->skb, sdata->vif.addr, sdata->vif.type);
2523 if (ret < 0)
2524 return ret;
2525
2526 ehdr = (struct ethhdr *) rx->skb->data;
2527 if (ehdr->h_proto == rx->sdata->control_port_protocol)
2528 *port_control = true;
2529 else if (check_port_control)
2530 return -1;
2531
2532 return 0;
2533 }
2534
2535 bool ieee80211_is_our_addr(struct ieee80211_sub_if_data *sdata,
2536 const u8 *addr, int *out_link_id)
2537 {
2538 unsigned int link_id;
2539
2540
2541 if (ether_addr_equal(sdata->vif.addr, addr))
2542 return true;
2543
2544 if (!sdata->vif.valid_links)
2545 return false;
2546
2547 for (link_id = 0; link_id < ARRAY_SIZE(sdata->vif.link_conf); link_id++) {
2548 struct ieee80211_bss_conf *conf;
2549
2550 conf = rcu_dereference(sdata->vif.link_conf[link_id]);
2551
2552 if (!conf)
2553 continue;
2554 if (ether_addr_equal(conf->addr, addr)) {
2555 if (out_link_id)
2556 *out_link_id = link_id;
2557 return true;
2558 }
2559 }
2560
2561 return false;
2562 }
2563
2564
2565
2566
2567 static bool ieee80211_frame_allowed(struct ieee80211_rx_data *rx, __le16 fc)
2568 {
2569 static const u8 pae_group_addr[ETH_ALEN] __aligned(2)
2570 = { 0x01, 0x80, 0xC2, 0x00, 0x00, 0x03 };
2571 struct ethhdr *ehdr = (struct ethhdr *) rx->skb->data;
2572
2573
2574
2575
2576
2577
2578 if (unlikely(ehdr->h_proto == rx->sdata->control_port_protocol))
2579 return ieee80211_is_our_addr(rx->sdata, ehdr->h_dest, NULL) ||
2580 ether_addr_equal(ehdr->h_dest, pae_group_addr);
2581
2582 if (ieee80211_802_1x_port_control(rx) ||
2583 ieee80211_drop_unencrypted(rx, fc))
2584 return false;
2585
2586 return true;
2587 }
2588
2589 static void ieee80211_deliver_skb_to_local_stack(struct sk_buff *skb,
2590 struct ieee80211_rx_data *rx)
2591 {
2592 struct ieee80211_sub_if_data *sdata = rx->sdata;
2593 struct net_device *dev = sdata->dev;
2594
2595 if (unlikely((skb->protocol == sdata->control_port_protocol ||
2596 (skb->protocol == cpu_to_be16(ETH_P_PREAUTH) &&
2597 !sdata->control_port_no_preauth)) &&
2598 sdata->control_port_over_nl80211)) {
2599 struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(skb);
2600 bool noencrypt = !(status->flag & RX_FLAG_DECRYPTED);
2601
2602 cfg80211_rx_control_port(dev, skb, noencrypt);
2603 dev_kfree_skb(skb);
2604 } else {
2605 struct ethhdr *ehdr = (void *)skb_mac_header(skb);
2606
2607 memset(skb->cb, 0, sizeof(skb->cb));
2608
2609
2610
2611
2612
2613
2614
2615
2616
2617
2618
2619
2620
2621
2622
2623
2624 if (unlikely(skb->protocol == sdata->control_port_protocol &&
2625 !ether_addr_equal(ehdr->h_dest, sdata->vif.addr)))
2626 ether_addr_copy(ehdr->h_dest, sdata->vif.addr);
2627
2628
2629 if (rx->list)
2630 list_add_tail(&skb->list, rx->list);
2631 else
2632 netif_receive_skb(skb);
2633 }
2634 }
2635
2636
2637
2638
2639 static void
2640 ieee80211_deliver_skb(struct ieee80211_rx_data *rx)
2641 {
2642 struct ieee80211_sub_if_data *sdata = rx->sdata;
2643 struct net_device *dev = sdata->dev;
2644 struct sk_buff *skb, *xmit_skb;
2645 struct ethhdr *ehdr = (struct ethhdr *) rx->skb->data;
2646 struct sta_info *dsta;
2647
2648 skb = rx->skb;
2649 xmit_skb = NULL;
2650
2651 dev_sw_netstats_rx_add(dev, skb->len);
2652
2653 if (rx->sta) {
2654
2655
2656
2657
2658
2659 u64_stats_update_begin(&rx->sta->deflink.rx_stats.syncp);
2660 rx->sta->deflink.rx_stats.msdu[rx->seqno_idx]++;
2661 u64_stats_update_end(&rx->sta->deflink.rx_stats.syncp);
2662 }
2663
2664 if ((sdata->vif.type == NL80211_IFTYPE_AP ||
2665 sdata->vif.type == NL80211_IFTYPE_AP_VLAN) &&
2666 !(sdata->flags & IEEE80211_SDATA_DONT_BRIDGE_PACKETS) &&
2667 ehdr->h_proto != rx->sdata->control_port_protocol &&
2668 (sdata->vif.type != NL80211_IFTYPE_AP_VLAN || !sdata->u.vlan.sta)) {
2669 if (is_multicast_ether_addr(ehdr->h_dest) &&
2670 ieee80211_vif_get_num_mcast_if(sdata) != 0) {
2671
2672
2673
2674
2675 xmit_skb = skb_copy(skb, GFP_ATOMIC);
2676 if (!xmit_skb)
2677 net_info_ratelimited("%s: failed to clone multicast frame\n",
2678 dev->name);
2679 } else if (!is_multicast_ether_addr(ehdr->h_dest) &&
2680 !ether_addr_equal(ehdr->h_dest, ehdr->h_source)) {
2681 dsta = sta_info_get(sdata, ehdr->h_dest);
2682 if (dsta) {
2683
2684
2685
2686
2687
2688
2689 xmit_skb = skb;
2690 skb = NULL;
2691 }
2692 }
2693 }
2694
2695 #ifndef CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS
2696 if (skb) {
2697
2698
2699
2700
2701
2702
2703 int align;
2704
2705 align = (unsigned long)(skb->data + sizeof(struct ethhdr)) & 3;
2706 if (align) {
2707 if (WARN_ON(skb_headroom(skb) < 3)) {
2708 dev_kfree_skb(skb);
2709 skb = NULL;
2710 } else {
2711 u8 *data = skb->data;
2712 size_t len = skb_headlen(skb);
2713 skb->data -= align;
2714 memmove(skb->data, data, len);
2715 skb_set_tail_pointer(skb, len);
2716 }
2717 }
2718 }
2719 #endif
2720
2721 if (skb) {
2722 skb->protocol = eth_type_trans(skb, dev);
2723 ieee80211_deliver_skb_to_local_stack(skb, rx);
2724 }
2725
2726 if (xmit_skb) {
2727
2728
2729
2730
2731
2732 xmit_skb->priority += 256;
2733 xmit_skb->protocol = htons(ETH_P_802_3);
2734 skb_reset_network_header(xmit_skb);
2735 skb_reset_mac_header(xmit_skb);
2736 dev_queue_xmit(xmit_skb);
2737 }
2738 }
2739
2740 static ieee80211_rx_result debug_noinline
2741 __ieee80211_rx_h_amsdu(struct ieee80211_rx_data *rx, u8 data_offset)
2742 {
2743 struct net_device *dev = rx->sdata->dev;
2744 struct sk_buff *skb = rx->skb;
2745 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
2746 __le16 fc = hdr->frame_control;
2747 struct sk_buff_head frame_list;
2748 struct ethhdr ethhdr;
2749 const u8 *check_da = ethhdr.h_dest, *check_sa = ethhdr.h_source;
2750
2751 if (unlikely(ieee80211_has_a4(hdr->frame_control))) {
2752 check_da = NULL;
2753 check_sa = NULL;
2754 } else switch (rx->sdata->vif.type) {
2755 case NL80211_IFTYPE_AP:
2756 case NL80211_IFTYPE_AP_VLAN:
2757 check_da = NULL;
2758 break;
2759 case NL80211_IFTYPE_STATION:
2760 if (!rx->sta ||
2761 !test_sta_flag(rx->sta, WLAN_STA_TDLS_PEER))
2762 check_sa = NULL;
2763 break;
2764 case NL80211_IFTYPE_MESH_POINT:
2765 check_sa = NULL;
2766 break;
2767 default:
2768 break;
2769 }
2770
2771 skb->dev = dev;
2772 __skb_queue_head_init(&frame_list);
2773
2774 if (ieee80211_data_to_8023_exthdr(skb, ðhdr,
2775 rx->sdata->vif.addr,
2776 rx->sdata->vif.type,
2777 data_offset, true))
2778 return RX_DROP_UNUSABLE;
2779
2780 ieee80211_amsdu_to_8023s(skb, &frame_list, dev->dev_addr,
2781 rx->sdata->vif.type,
2782 rx->local->hw.extra_tx_headroom,
2783 check_da, check_sa);
2784
2785 while (!skb_queue_empty(&frame_list)) {
2786 rx->skb = __skb_dequeue(&frame_list);
2787
2788 if (!ieee80211_frame_allowed(rx, fc)) {
2789 dev_kfree_skb(rx->skb);
2790 continue;
2791 }
2792
2793 ieee80211_deliver_skb(rx);
2794 }
2795
2796 return RX_QUEUED;
2797 }
2798
2799 static ieee80211_rx_result debug_noinline
2800 ieee80211_rx_h_amsdu(struct ieee80211_rx_data *rx)
2801 {
2802 struct sk_buff *skb = rx->skb;
2803 struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(skb);
2804 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
2805 __le16 fc = hdr->frame_control;
2806
2807 if (!(status->rx_flags & IEEE80211_RX_AMSDU))
2808 return RX_CONTINUE;
2809
2810 if (unlikely(!ieee80211_is_data(fc)))
2811 return RX_CONTINUE;
2812
2813 if (unlikely(!ieee80211_is_data_present(fc)))
2814 return RX_DROP_MONITOR;
2815
2816 if (unlikely(ieee80211_has_a4(hdr->frame_control))) {
2817 switch (rx->sdata->vif.type) {
2818 case NL80211_IFTYPE_AP_VLAN:
2819 if (!rx->sdata->u.vlan.sta)
2820 return RX_DROP_UNUSABLE;
2821 break;
2822 case NL80211_IFTYPE_STATION:
2823 if (!rx->sdata->u.mgd.use_4addr)
2824 return RX_DROP_UNUSABLE;
2825 break;
2826 default:
2827 return RX_DROP_UNUSABLE;
2828 }
2829 }
2830
2831 if (is_multicast_ether_addr(hdr->addr1))
2832 return RX_DROP_UNUSABLE;
2833
2834 if (rx->key) {
2835
2836
2837
2838
2839
2840
2841 switch (rx->key->conf.cipher) {
2842 case WLAN_CIPHER_SUITE_WEP40:
2843 case WLAN_CIPHER_SUITE_WEP104:
2844 case WLAN_CIPHER_SUITE_TKIP:
2845 return RX_DROP_UNUSABLE;
2846 default:
2847 break;
2848 }
2849 }
2850
2851 return __ieee80211_rx_h_amsdu(rx, 0);
2852 }
2853
2854 #ifdef CONFIG_MAC80211_MESH
2855 static ieee80211_rx_result
2856 ieee80211_rx_h_mesh_fwding(struct ieee80211_rx_data *rx)
2857 {
2858 struct ieee80211_hdr *fwd_hdr, *hdr;
2859 struct ieee80211_tx_info *info;
2860 struct ieee80211s_hdr *mesh_hdr;
2861 struct sk_buff *skb = rx->skb, *fwd_skb;
2862 struct ieee80211_local *local = rx->local;
2863 struct ieee80211_sub_if_data *sdata = rx->sdata;
2864 struct ieee80211_if_mesh *ifmsh = &sdata->u.mesh;
2865 u16 ac, q, hdrlen;
2866 int tailroom = 0;
2867
2868 hdr = (struct ieee80211_hdr *) skb->data;
2869 hdrlen = ieee80211_hdrlen(hdr->frame_control);
2870
2871
2872 if (!pskb_may_pull(rx->skb, hdrlen + 6))
2873 return RX_DROP_MONITOR;
2874
2875 mesh_hdr = (struct ieee80211s_hdr *) (skb->data + hdrlen);
2876
2877
2878 if (!pskb_may_pull(rx->skb,
2879 hdrlen + ieee80211_get_mesh_hdrlen(mesh_hdr)))
2880 return RX_DROP_MONITOR;
2881
2882
2883 hdr = (struct ieee80211_hdr *) skb->data;
2884 mesh_hdr = (struct ieee80211s_hdr *) (skb->data + hdrlen);
2885
2886 if (ieee80211_drop_unencrypted(rx, hdr->frame_control))
2887 return RX_DROP_MONITOR;
2888
2889
2890 if (ieee80211_is_data(hdr->frame_control) &&
2891 is_multicast_ether_addr(hdr->addr1) &&
2892 mesh_rmc_check(rx->sdata, hdr->addr3, mesh_hdr))
2893 return RX_DROP_MONITOR;
2894
2895 if (!ieee80211_is_data(hdr->frame_control))
2896 return RX_CONTINUE;
2897
2898 if (!mesh_hdr->ttl)
2899 return RX_DROP_MONITOR;
2900
2901 if (mesh_hdr->flags & MESH_FLAGS_AE) {
2902 struct mesh_path *mppath;
2903 char *proxied_addr;
2904 char *mpp_addr;
2905
2906 if (is_multicast_ether_addr(hdr->addr1)) {
2907 mpp_addr = hdr->addr3;
2908 proxied_addr = mesh_hdr->eaddr1;
2909 } else if ((mesh_hdr->flags & MESH_FLAGS_AE) ==
2910 MESH_FLAGS_AE_A5_A6) {
2911
2912 mpp_addr = hdr->addr4;
2913 proxied_addr = mesh_hdr->eaddr2;
2914 } else {
2915 return RX_DROP_MONITOR;
2916 }
2917
2918 rcu_read_lock();
2919 mppath = mpp_path_lookup(sdata, proxied_addr);
2920 if (!mppath) {
2921 mpp_path_add(sdata, proxied_addr, mpp_addr);
2922 } else {
2923 spin_lock_bh(&mppath->state_lock);
2924 if (!ether_addr_equal(mppath->mpp, mpp_addr))
2925 memcpy(mppath->mpp, mpp_addr, ETH_ALEN);
2926 mppath->exp_time = jiffies;
2927 spin_unlock_bh(&mppath->state_lock);
2928 }
2929 rcu_read_unlock();
2930 }
2931
2932
2933 if (!is_multicast_ether_addr(hdr->addr1) &&
2934 ether_addr_equal(sdata->vif.addr, hdr->addr3))
2935 return RX_CONTINUE;
2936
2937 ac = ieee802_1d_to_ac[skb->priority];
2938 q = sdata->vif.hw_queue[ac];
2939 if (ieee80211_queue_stopped(&local->hw, q)) {
2940 IEEE80211_IFSTA_MESH_CTR_INC(ifmsh, dropped_frames_congestion);
2941 return RX_DROP_MONITOR;
2942 }
2943 skb_set_queue_mapping(skb, ac);
2944
2945 if (!--mesh_hdr->ttl) {
2946 if (!is_multicast_ether_addr(hdr->addr1))
2947 IEEE80211_IFSTA_MESH_CTR_INC(ifmsh,
2948 dropped_frames_ttl);
2949 goto out;
2950 }
2951
2952 if (!ifmsh->mshcfg.dot11MeshForwarding)
2953 goto out;
2954
2955 if (sdata->crypto_tx_tailroom_needed_cnt)
2956 tailroom = IEEE80211_ENCRYPT_TAILROOM;
2957
2958 fwd_skb = skb_copy_expand(skb, local->tx_headroom +
2959 IEEE80211_ENCRYPT_HEADROOM,
2960 tailroom, GFP_ATOMIC);
2961 if (!fwd_skb)
2962 goto out;
2963
2964 fwd_skb->dev = sdata->dev;
2965 fwd_hdr = (struct ieee80211_hdr *) fwd_skb->data;
2966 fwd_hdr->frame_control &= ~cpu_to_le16(IEEE80211_FCTL_RETRY);
2967 info = IEEE80211_SKB_CB(fwd_skb);
2968 memset(info, 0, sizeof(*info));
2969 info->control.flags |= IEEE80211_TX_INTCFL_NEED_TXPROCESSING;
2970 info->control.vif = &rx->sdata->vif;
2971 info->control.jiffies = jiffies;
2972 if (is_multicast_ether_addr(fwd_hdr->addr1)) {
2973 IEEE80211_IFSTA_MESH_CTR_INC(ifmsh, fwded_mcast);
2974 memcpy(fwd_hdr->addr2, sdata->vif.addr, ETH_ALEN);
2975
2976 ieee80211_mps_set_frame_flags(sdata, NULL, fwd_hdr);
2977 } else if (!mesh_nexthop_lookup(sdata, fwd_skb)) {
2978
2979 IEEE80211_IFSTA_MESH_CTR_INC(ifmsh, fwded_unicast);
2980 } else {
2981
2982 mesh_path_error_tx(sdata, ifmsh->mshcfg.element_ttl,
2983 fwd_hdr->addr3, 0,
2984 WLAN_REASON_MESH_PATH_NOFORWARD,
2985 fwd_hdr->addr2);
2986 IEEE80211_IFSTA_MESH_CTR_INC(ifmsh, dropped_frames_no_route);
2987 kfree_skb(fwd_skb);
2988 return RX_DROP_MONITOR;
2989 }
2990
2991 IEEE80211_IFSTA_MESH_CTR_INC(ifmsh, fwded_frames);
2992 ieee80211_add_pending_skb(local, fwd_skb);
2993 out:
2994 if (is_multicast_ether_addr(hdr->addr1))
2995 return RX_CONTINUE;
2996 return RX_DROP_MONITOR;
2997 }
2998 #endif
2999
3000 static ieee80211_rx_result debug_noinline
3001 ieee80211_rx_h_data(struct ieee80211_rx_data *rx)
3002 {
3003 struct ieee80211_sub_if_data *sdata = rx->sdata;
3004 struct ieee80211_local *local = rx->local;
3005 struct net_device *dev = sdata->dev;
3006 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)rx->skb->data;
3007 __le16 fc = hdr->frame_control;
3008 bool port_control;
3009 int err;
3010
3011 if (unlikely(!ieee80211_is_data(hdr->frame_control)))
3012 return RX_CONTINUE;
3013
3014 if (unlikely(!ieee80211_is_data_present(hdr->frame_control)))
3015 return RX_DROP_MONITOR;
3016
3017
3018
3019
3020
3021 if (ieee80211_has_a4(hdr->frame_control) &&
3022 sdata->vif.type == NL80211_IFTYPE_AP) {
3023 if (rx->sta &&
3024 !test_and_set_sta_flag(rx->sta, WLAN_STA_4ADDR_EVENT))
3025 cfg80211_rx_unexpected_4addr_frame(
3026 rx->sdata->dev, rx->sta->sta.addr, GFP_ATOMIC);
3027 return RX_DROP_MONITOR;
3028 }
3029
3030 err = __ieee80211_data_to_8023(rx, &port_control);
3031 if (unlikely(err))
3032 return RX_DROP_UNUSABLE;
3033
3034 if (!ieee80211_frame_allowed(rx, fc))
3035 return RX_DROP_MONITOR;
3036
3037
3038 if (unlikely(((struct ethhdr *)rx->skb->data)->h_proto ==
3039 cpu_to_be16(ETH_P_TDLS))) {
3040 struct ieee80211_tdls_data *tf = (void *)rx->skb->data;
3041
3042 if (pskb_may_pull(rx->skb,
3043 offsetof(struct ieee80211_tdls_data, u)) &&
3044 tf->payload_type == WLAN_TDLS_SNAP_RFTYPE &&
3045 tf->category == WLAN_CATEGORY_TDLS &&
3046 (tf->action_code == WLAN_TDLS_CHANNEL_SWITCH_REQUEST ||
3047 tf->action_code == WLAN_TDLS_CHANNEL_SWITCH_RESPONSE)) {
3048 rx->skb->protocol = cpu_to_be16(ETH_P_TDLS);
3049 __ieee80211_queue_skb_to_iface(sdata, rx->sta, rx->skb);
3050 return RX_QUEUED;
3051 }
3052 }
3053
3054 if (rx->sdata->vif.type == NL80211_IFTYPE_AP_VLAN &&
3055 unlikely(port_control) && sdata->bss) {
3056 sdata = container_of(sdata->bss, struct ieee80211_sub_if_data,
3057 u.ap);
3058 dev = sdata->dev;
3059 rx->sdata = sdata;
3060 }
3061
3062 rx->skb->dev = dev;
3063
3064 if (!ieee80211_hw_check(&local->hw, SUPPORTS_DYNAMIC_PS) &&
3065 local->ps_sdata && local->hw.conf.dynamic_ps_timeout > 0 &&
3066 !is_multicast_ether_addr(
3067 ((struct ethhdr *)rx->skb->data)->h_dest) &&
3068 (!local->scanning &&
3069 !test_bit(SDATA_STATE_OFFCHANNEL, &sdata->state)))
3070 mod_timer(&local->dynamic_ps_timer, jiffies +
3071 msecs_to_jiffies(local->hw.conf.dynamic_ps_timeout));
3072
3073 ieee80211_deliver_skb(rx);
3074
3075 return RX_QUEUED;
3076 }
3077
3078 static ieee80211_rx_result debug_noinline
3079 ieee80211_rx_h_ctrl(struct ieee80211_rx_data *rx, struct sk_buff_head *frames)
3080 {
3081 struct sk_buff *skb = rx->skb;
3082 struct ieee80211_bar *bar = (struct ieee80211_bar *)skb->data;
3083 struct tid_ampdu_rx *tid_agg_rx;
3084 u16 start_seq_num;
3085 u16 tid;
3086
3087 if (likely(!ieee80211_is_ctl(bar->frame_control)))
3088 return RX_CONTINUE;
3089
3090 if (ieee80211_is_back_req(bar->frame_control)) {
3091 struct {
3092 __le16 control, start_seq_num;
3093 } __packed bar_data;
3094 struct ieee80211_event event = {
3095 .type = BAR_RX_EVENT,
3096 };
3097
3098 if (!rx->sta)
3099 return RX_DROP_MONITOR;
3100
3101 if (skb_copy_bits(skb, offsetof(struct ieee80211_bar, control),
3102 &bar_data, sizeof(bar_data)))
3103 return RX_DROP_MONITOR;
3104
3105 tid = le16_to_cpu(bar_data.control) >> 12;
3106
3107 if (!test_bit(tid, rx->sta->ampdu_mlme.agg_session_valid) &&
3108 !test_and_set_bit(tid, rx->sta->ampdu_mlme.unexpected_agg))
3109 ieee80211_send_delba(rx->sdata, rx->sta->sta.addr, tid,
3110 WLAN_BACK_RECIPIENT,
3111 WLAN_REASON_QSTA_REQUIRE_SETUP);
3112
3113 tid_agg_rx = rcu_dereference(rx->sta->ampdu_mlme.tid_rx[tid]);
3114 if (!tid_agg_rx)
3115 return RX_DROP_MONITOR;
3116
3117 start_seq_num = le16_to_cpu(bar_data.start_seq_num) >> 4;
3118 event.u.ba.tid = tid;
3119 event.u.ba.ssn = start_seq_num;
3120 event.u.ba.sta = &rx->sta->sta;
3121
3122
3123 if (tid_agg_rx->timeout)
3124 mod_timer(&tid_agg_rx->session_timer,
3125 TU_TO_EXP_TIME(tid_agg_rx->timeout));
3126
3127 spin_lock(&tid_agg_rx->reorder_lock);
3128
3129 ieee80211_release_reorder_frames(rx->sdata, tid_agg_rx,
3130 start_seq_num, frames);
3131 spin_unlock(&tid_agg_rx->reorder_lock);
3132
3133 drv_event_callback(rx->local, rx->sdata, &event);
3134
3135 kfree_skb(skb);
3136 return RX_QUEUED;
3137 }
3138
3139
3140
3141
3142
3143
3144 return RX_DROP_MONITOR;
3145 }
3146
3147 static void ieee80211_process_sa_query_req(struct ieee80211_sub_if_data *sdata,
3148 struct ieee80211_mgmt *mgmt,
3149 size_t len)
3150 {
3151 struct ieee80211_local *local = sdata->local;
3152 struct sk_buff *skb;
3153 struct ieee80211_mgmt *resp;
3154
3155 if (!ether_addr_equal(mgmt->da, sdata->vif.addr)) {
3156
3157 return;
3158 }
3159
3160 if (!ether_addr_equal(mgmt->sa, sdata->deflink.u.mgd.bssid) ||
3161 !ether_addr_equal(mgmt->bssid, sdata->deflink.u.mgd.bssid)) {
3162
3163 return;
3164 }
3165
3166 if (len < 24 + 1 + sizeof(resp->u.action.u.sa_query)) {
3167
3168 return;
3169 }
3170
3171 skb = dev_alloc_skb(sizeof(*resp) + local->hw.extra_tx_headroom);
3172 if (skb == NULL)
3173 return;
3174
3175 skb_reserve(skb, local->hw.extra_tx_headroom);
3176 resp = skb_put_zero(skb, 24);
3177 memcpy(resp->da, mgmt->sa, ETH_ALEN);
3178 memcpy(resp->sa, sdata->vif.addr, ETH_ALEN);
3179 memcpy(resp->bssid, sdata->deflink.u.mgd.bssid, ETH_ALEN);
3180 resp->frame_control = cpu_to_le16(IEEE80211_FTYPE_MGMT |
3181 IEEE80211_STYPE_ACTION);
3182 skb_put(skb, 1 + sizeof(resp->u.action.u.sa_query));
3183 resp->u.action.category = WLAN_CATEGORY_SA_QUERY;
3184 resp->u.action.u.sa_query.action = WLAN_ACTION_SA_QUERY_RESPONSE;
3185 memcpy(resp->u.action.u.sa_query.trans_id,
3186 mgmt->u.action.u.sa_query.trans_id,
3187 WLAN_SA_QUERY_TR_ID_LEN);
3188
3189 ieee80211_tx_skb(sdata, skb);
3190 }
3191
3192 static void
3193 ieee80211_rx_check_bss_color_collision(struct ieee80211_rx_data *rx)
3194 {
3195 struct ieee80211_mgmt *mgmt = (void *)rx->skb->data;
3196 const struct element *ie;
3197 size_t baselen;
3198
3199 if (!wiphy_ext_feature_isset(rx->local->hw.wiphy,
3200 NL80211_EXT_FEATURE_BSS_COLOR))
3201 return;
3202
3203 if (ieee80211_hw_check(&rx->local->hw, DETECTS_COLOR_COLLISION))
3204 return;
3205
3206 if (rx->sdata->vif.bss_conf.csa_active)
3207 return;
3208
3209 baselen = mgmt->u.beacon.variable - rx->skb->data;
3210 if (baselen > rx->skb->len)
3211 return;
3212
3213 ie = cfg80211_find_ext_elem(WLAN_EID_EXT_HE_OPERATION,
3214 mgmt->u.beacon.variable,
3215 rx->skb->len - baselen);
3216 if (ie && ie->datalen >= sizeof(struct ieee80211_he_operation) &&
3217 ie->datalen >= ieee80211_he_oper_size(ie->data + 1)) {
3218 struct ieee80211_bss_conf *bss_conf = &rx->sdata->vif.bss_conf;
3219 const struct ieee80211_he_operation *he_oper;
3220 u8 color;
3221
3222 he_oper = (void *)(ie->data + 1);
3223 if (le32_get_bits(he_oper->he_oper_params,
3224 IEEE80211_HE_OPERATION_BSS_COLOR_DISABLED))
3225 return;
3226
3227 color = le32_get_bits(he_oper->he_oper_params,
3228 IEEE80211_HE_OPERATION_BSS_COLOR_MASK);
3229 if (color == bss_conf->he_bss_color.color)
3230 ieeee80211_obss_color_collision_notify(&rx->sdata->vif,
3231 BIT_ULL(color),
3232 GFP_ATOMIC);
3233 }
3234 }
3235
3236 static ieee80211_rx_result debug_noinline
3237 ieee80211_rx_h_mgmt_check(struct ieee80211_rx_data *rx)
3238 {
3239 struct ieee80211_mgmt *mgmt = (struct ieee80211_mgmt *) rx->skb->data;
3240 struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(rx->skb);
3241
3242 if (ieee80211_is_s1g_beacon(mgmt->frame_control))
3243 return RX_CONTINUE;
3244
3245
3246
3247
3248
3249
3250 if (rx->skb->len < 24)
3251 return RX_DROP_MONITOR;
3252
3253 if (!ieee80211_is_mgmt(mgmt->frame_control))
3254 return RX_DROP_MONITOR;
3255
3256 if (rx->sdata->vif.type == NL80211_IFTYPE_AP &&
3257 ieee80211_is_beacon(mgmt->frame_control) &&
3258 !(rx->flags & IEEE80211_RX_BEACON_REPORTED)) {
3259 int sig = 0;
3260
3261
3262 ieee80211_rx_check_bss_color_collision(rx);
3263
3264 if (ieee80211_hw_check(&rx->local->hw, SIGNAL_DBM) &&
3265 !(status->flag & RX_FLAG_NO_SIGNAL_VAL))
3266 sig = status->signal;
3267
3268 cfg80211_report_obss_beacon_khz(rx->local->hw.wiphy,
3269 rx->skb->data, rx->skb->len,
3270 ieee80211_rx_status_to_khz(status),
3271 sig);
3272 rx->flags |= IEEE80211_RX_BEACON_REPORTED;
3273 }
3274
3275 if (ieee80211_drop_unencrypted_mgmt(rx))
3276 return RX_DROP_UNUSABLE;
3277
3278 return RX_CONTINUE;
3279 }
3280
3281 static bool
3282 ieee80211_process_rx_twt_action(struct ieee80211_rx_data *rx)
3283 {
3284 struct ieee80211_mgmt *mgmt = (struct ieee80211_mgmt *)rx->skb->data;
3285 struct ieee80211_sub_if_data *sdata = rx->sdata;
3286
3287
3288 if (sdata->vif.type != NL80211_IFTYPE_AP)
3289 return false;
3290
3291 if (!rx->local->ops->add_twt_setup)
3292 return false;
3293
3294 if (!sdata->vif.bss_conf.twt_responder)
3295 return false;
3296
3297 if (!rx->sta)
3298 return false;
3299
3300 switch (mgmt->u.action.u.s1g.action_code) {
3301 case WLAN_S1G_TWT_SETUP: {
3302 struct ieee80211_twt_setup *twt;
3303
3304 if (rx->skb->len < IEEE80211_MIN_ACTION_SIZE +
3305 1 +
3306 sizeof(struct ieee80211_twt_setup) +
3307 2 )
3308 break;
3309
3310 twt = (void *)mgmt->u.action.u.s1g.variable;
3311 if (twt->element_id != WLAN_EID_S1G_TWT)
3312 break;
3313
3314 if (rx->skb->len < IEEE80211_MIN_ACTION_SIZE +
3315 4 +
3316 twt->length)
3317 break;
3318
3319 return true;
3320 }
3321 case WLAN_S1G_TWT_TEARDOWN:
3322 if (rx->skb->len < IEEE80211_MIN_ACTION_SIZE + 2)
3323 break;
3324
3325 return true;
3326 default:
3327 break;
3328 }
3329
3330 return false;
3331 }
3332
3333 static ieee80211_rx_result debug_noinline
3334 ieee80211_rx_h_action(struct ieee80211_rx_data *rx)
3335 {
3336 struct ieee80211_local *local = rx->local;
3337 struct ieee80211_sub_if_data *sdata = rx->sdata;
3338 struct ieee80211_mgmt *mgmt = (struct ieee80211_mgmt *) rx->skb->data;
3339 struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(rx->skb);
3340 int len = rx->skb->len;
3341
3342 if (!ieee80211_is_action(mgmt->frame_control))
3343 return RX_CONTINUE;
3344
3345
3346 if (len < IEEE80211_MIN_ACTION_SIZE)
3347 return RX_DROP_UNUSABLE;
3348
3349 if (!rx->sta && mgmt->u.action.category != WLAN_CATEGORY_PUBLIC &&
3350 mgmt->u.action.category != WLAN_CATEGORY_SELF_PROTECTED &&
3351 mgmt->u.action.category != WLAN_CATEGORY_SPECTRUM_MGMT)
3352 return RX_DROP_UNUSABLE;
3353
3354 switch (mgmt->u.action.category) {
3355 case WLAN_CATEGORY_HT:
3356
3357 if (!rx->sta->sta.deflink.ht_cap.ht_supported)
3358 goto invalid;
3359
3360 if (sdata->vif.type != NL80211_IFTYPE_STATION &&
3361 sdata->vif.type != NL80211_IFTYPE_MESH_POINT &&
3362 sdata->vif.type != NL80211_IFTYPE_AP_VLAN &&
3363 sdata->vif.type != NL80211_IFTYPE_AP &&
3364 sdata->vif.type != NL80211_IFTYPE_ADHOC)
3365 break;
3366
3367
3368 if (len < IEEE80211_MIN_ACTION_SIZE + 2)
3369 goto invalid;
3370
3371 switch (mgmt->u.action.u.ht_smps.action) {
3372 case WLAN_HT_ACTION_SMPS: {
3373 struct ieee80211_supported_band *sband;
3374 enum ieee80211_smps_mode smps_mode;
3375 struct sta_opmode_info sta_opmode = {};
3376
3377 if (sdata->vif.type != NL80211_IFTYPE_AP &&
3378 sdata->vif.type != NL80211_IFTYPE_AP_VLAN)
3379 goto handled;
3380
3381
3382 switch (mgmt->u.action.u.ht_smps.smps_control) {
3383 case WLAN_HT_SMPS_CONTROL_DISABLED:
3384 smps_mode = IEEE80211_SMPS_OFF;
3385 break;
3386 case WLAN_HT_SMPS_CONTROL_STATIC:
3387 smps_mode = IEEE80211_SMPS_STATIC;
3388 break;
3389 case WLAN_HT_SMPS_CONTROL_DYNAMIC:
3390 smps_mode = IEEE80211_SMPS_DYNAMIC;
3391 break;
3392 default:
3393 goto invalid;
3394 }
3395
3396
3397 if (rx->sta->sta.smps_mode == smps_mode)
3398 goto handled;
3399 rx->sta->sta.smps_mode = smps_mode;
3400 sta_opmode.smps_mode =
3401 ieee80211_smps_mode_to_smps_mode(smps_mode);
3402 sta_opmode.changed = STA_OPMODE_SMPS_MODE_CHANGED;
3403
3404 sband = rx->local->hw.wiphy->bands[status->band];
3405
3406 rate_control_rate_update(local, sband, rx->sta, 0,
3407 IEEE80211_RC_SMPS_CHANGED);
3408 cfg80211_sta_opmode_change_notify(sdata->dev,
3409 rx->sta->addr,
3410 &sta_opmode,
3411 GFP_ATOMIC);
3412 goto handled;
3413 }
3414 case WLAN_HT_ACTION_NOTIFY_CHANWIDTH: {
3415 struct ieee80211_supported_band *sband;
3416 u8 chanwidth = mgmt->u.action.u.ht_notify_cw.chanwidth;
3417 enum ieee80211_sta_rx_bandwidth max_bw, new_bw;
3418 struct sta_opmode_info sta_opmode = {};
3419
3420
3421 if (!(rx->sta->sta.deflink.ht_cap.cap &
3422 IEEE80211_HT_CAP_SUP_WIDTH_20_40))
3423 goto handled;
3424
3425 if (chanwidth == IEEE80211_HT_CHANWIDTH_20MHZ)
3426 max_bw = IEEE80211_STA_RX_BW_20;
3427 else
3428 max_bw = ieee80211_sta_cap_rx_bw(&rx->sta->deflink);
3429
3430
3431 rx->sta->deflink.cur_max_bandwidth = max_bw;
3432 new_bw = ieee80211_sta_cur_vht_bw(&rx->sta->deflink);
3433
3434 if (rx->sta->sta.deflink.bandwidth == new_bw)
3435 goto handled;
3436
3437 rx->sta->sta.deflink.bandwidth = new_bw;
3438 sband = rx->local->hw.wiphy->bands[status->band];
3439 sta_opmode.bw =
3440 ieee80211_sta_rx_bw_to_chan_width(&rx->sta->deflink);
3441 sta_opmode.changed = STA_OPMODE_MAX_BW_CHANGED;
3442
3443 rate_control_rate_update(local, sband, rx->sta, 0,
3444 IEEE80211_RC_BW_CHANGED);
3445 cfg80211_sta_opmode_change_notify(sdata->dev,
3446 rx->sta->addr,
3447 &sta_opmode,
3448 GFP_ATOMIC);
3449 goto handled;
3450 }
3451 default:
3452 goto invalid;
3453 }
3454
3455 break;
3456 case WLAN_CATEGORY_PUBLIC:
3457 if (len < IEEE80211_MIN_ACTION_SIZE + 1)
3458 goto invalid;
3459 if (sdata->vif.type != NL80211_IFTYPE_STATION)
3460 break;
3461 if (!rx->sta)
3462 break;
3463 if (!ether_addr_equal(mgmt->bssid, sdata->deflink.u.mgd.bssid))
3464 break;
3465 if (mgmt->u.action.u.ext_chan_switch.action_code !=
3466 WLAN_PUB_ACTION_EXT_CHANSW_ANN)
3467 break;
3468 if (len < offsetof(struct ieee80211_mgmt,
3469 u.action.u.ext_chan_switch.variable))
3470 goto invalid;
3471 goto queue;
3472 case WLAN_CATEGORY_VHT:
3473 if (sdata->vif.type != NL80211_IFTYPE_STATION &&
3474 sdata->vif.type != NL80211_IFTYPE_MESH_POINT &&
3475 sdata->vif.type != NL80211_IFTYPE_AP_VLAN &&
3476 sdata->vif.type != NL80211_IFTYPE_AP &&
3477 sdata->vif.type != NL80211_IFTYPE_ADHOC)
3478 break;
3479
3480
3481 if (len < IEEE80211_MIN_ACTION_SIZE + 1)
3482 goto invalid;
3483
3484 switch (mgmt->u.action.u.vht_opmode_notif.action_code) {
3485 case WLAN_VHT_ACTION_OPMODE_NOTIF: {
3486
3487 if (len < IEEE80211_MIN_ACTION_SIZE + 2)
3488 goto invalid;
3489 goto queue;
3490 }
3491 case WLAN_VHT_ACTION_GROUPID_MGMT: {
3492 if (len < IEEE80211_MIN_ACTION_SIZE + 25)
3493 goto invalid;
3494 goto queue;
3495 }
3496 default:
3497 break;
3498 }
3499 break;
3500 case WLAN_CATEGORY_BACK:
3501 if (sdata->vif.type != NL80211_IFTYPE_STATION &&
3502 sdata->vif.type != NL80211_IFTYPE_MESH_POINT &&
3503 sdata->vif.type != NL80211_IFTYPE_AP_VLAN &&
3504 sdata->vif.type != NL80211_IFTYPE_AP &&
3505 sdata->vif.type != NL80211_IFTYPE_ADHOC)
3506 break;
3507
3508
3509 if (len < IEEE80211_MIN_ACTION_SIZE + 1)
3510 break;
3511
3512 switch (mgmt->u.action.u.addba_req.action_code) {
3513 case WLAN_ACTION_ADDBA_REQ:
3514 if (len < (IEEE80211_MIN_ACTION_SIZE +
3515 sizeof(mgmt->u.action.u.addba_req)))
3516 goto invalid;
3517 break;
3518 case WLAN_ACTION_ADDBA_RESP:
3519 if (len < (IEEE80211_MIN_ACTION_SIZE +
3520 sizeof(mgmt->u.action.u.addba_resp)))
3521 goto invalid;
3522 break;
3523 case WLAN_ACTION_DELBA:
3524 if (len < (IEEE80211_MIN_ACTION_SIZE +
3525 sizeof(mgmt->u.action.u.delba)))
3526 goto invalid;
3527 break;
3528 default:
3529 goto invalid;
3530 }
3531
3532 goto queue;
3533 case WLAN_CATEGORY_SPECTRUM_MGMT:
3534
3535 if (len < IEEE80211_MIN_ACTION_SIZE + 1)
3536 break;
3537
3538 switch (mgmt->u.action.u.measurement.action_code) {
3539 case WLAN_ACTION_SPCT_MSR_REQ:
3540 if (status->band != NL80211_BAND_5GHZ)
3541 break;
3542
3543 if (len < (IEEE80211_MIN_ACTION_SIZE +
3544 sizeof(mgmt->u.action.u.measurement)))
3545 break;
3546
3547 if (sdata->vif.type != NL80211_IFTYPE_STATION)
3548 break;
3549
3550 ieee80211_process_measurement_req(sdata, mgmt, len);
3551 goto handled;
3552 case WLAN_ACTION_SPCT_CHL_SWITCH: {
3553 u8 *bssid;
3554 if (len < (IEEE80211_MIN_ACTION_SIZE +
3555 sizeof(mgmt->u.action.u.chan_switch)))
3556 break;
3557
3558 if (sdata->vif.type != NL80211_IFTYPE_STATION &&
3559 sdata->vif.type != NL80211_IFTYPE_ADHOC &&
3560 sdata->vif.type != NL80211_IFTYPE_MESH_POINT)
3561 break;
3562
3563 if (sdata->vif.type == NL80211_IFTYPE_STATION)
3564 bssid = sdata->deflink.u.mgd.bssid;
3565 else if (sdata->vif.type == NL80211_IFTYPE_ADHOC)
3566 bssid = sdata->u.ibss.bssid;
3567 else if (sdata->vif.type == NL80211_IFTYPE_MESH_POINT)
3568 bssid = mgmt->sa;
3569 else
3570 break;
3571
3572 if (!ether_addr_equal(mgmt->bssid, bssid))
3573 break;
3574
3575 goto queue;
3576 }
3577 }
3578 break;
3579 case WLAN_CATEGORY_SELF_PROTECTED:
3580 if (len < (IEEE80211_MIN_ACTION_SIZE +
3581 sizeof(mgmt->u.action.u.self_prot.action_code)))
3582 break;
3583
3584 switch (mgmt->u.action.u.self_prot.action_code) {
3585 case WLAN_SP_MESH_PEERING_OPEN:
3586 case WLAN_SP_MESH_PEERING_CLOSE:
3587 case WLAN_SP_MESH_PEERING_CONFIRM:
3588 if (!ieee80211_vif_is_mesh(&sdata->vif))
3589 goto invalid;
3590 if (sdata->u.mesh.user_mpm)
3591
3592 break;
3593 goto queue;
3594 case WLAN_SP_MGK_INFORM:
3595 case WLAN_SP_MGK_ACK:
3596 if (!ieee80211_vif_is_mesh(&sdata->vif))
3597 goto invalid;
3598 break;
3599 }
3600 break;
3601 case WLAN_CATEGORY_MESH_ACTION:
3602 if (len < (IEEE80211_MIN_ACTION_SIZE +
3603 sizeof(mgmt->u.action.u.mesh_action.action_code)))
3604 break;
3605
3606 if (!ieee80211_vif_is_mesh(&sdata->vif))
3607 break;
3608 if (mesh_action_is_path_sel(mgmt) &&
3609 !mesh_path_sel_is_hwmp(sdata))
3610 break;
3611 goto queue;
3612 case WLAN_CATEGORY_S1G:
3613 switch (mgmt->u.action.u.s1g.action_code) {
3614 case WLAN_S1G_TWT_SETUP:
3615 case WLAN_S1G_TWT_TEARDOWN:
3616 if (ieee80211_process_rx_twt_action(rx))
3617 goto queue;
3618 break;
3619 default:
3620 break;
3621 }
3622 break;
3623 }
3624
3625 return RX_CONTINUE;
3626
3627 invalid:
3628 status->rx_flags |= IEEE80211_RX_MALFORMED_ACTION_FRM;
3629
3630 return RX_CONTINUE;
3631
3632 handled:
3633 if (rx->sta)
3634 rx->sta->deflink.rx_stats.packets++;
3635 dev_kfree_skb(rx->skb);
3636 return RX_QUEUED;
3637
3638 queue:
3639 ieee80211_queue_skb_to_iface(sdata, rx->sta, rx->skb);
3640 return RX_QUEUED;
3641 }
3642
3643 static ieee80211_rx_result debug_noinline
3644 ieee80211_rx_h_userspace_mgmt(struct ieee80211_rx_data *rx)
3645 {
3646 struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(rx->skb);
3647 struct cfg80211_rx_info info = {
3648 .freq = ieee80211_rx_status_to_khz(status),
3649 .buf = rx->skb->data,
3650 .len = rx->skb->len,
3651 .link_id = rx->link_id,
3652 .have_link_id = rx->link_id >= 0,
3653 };
3654
3655
3656 if (status->rx_flags & IEEE80211_RX_MALFORMED_ACTION_FRM)
3657 return RX_CONTINUE;
3658
3659
3660
3661
3662
3663
3664
3665
3666 if (ieee80211_hw_check(&rx->local->hw, SIGNAL_DBM) &&
3667 !(status->flag & RX_FLAG_NO_SIGNAL_VAL))
3668 info.sig_dbm = status->signal;
3669
3670 if (ieee80211_is_timing_measurement(rx->skb) ||
3671 ieee80211_is_ftm(rx->skb)) {
3672 info.rx_tstamp = ktime_to_ns(skb_hwtstamps(rx->skb)->hwtstamp);
3673 info.ack_tstamp = ktime_to_ns(status->ack_tx_hwtstamp);
3674 }
3675
3676 if (cfg80211_rx_mgmt_ext(&rx->sdata->wdev, &info)) {
3677 if (rx->sta)
3678 rx->sta->deflink.rx_stats.packets++;
3679 dev_kfree_skb(rx->skb);
3680 return RX_QUEUED;
3681 }
3682
3683 return RX_CONTINUE;
3684 }
3685
3686 static ieee80211_rx_result debug_noinline
3687 ieee80211_rx_h_action_post_userspace(struct ieee80211_rx_data *rx)
3688 {
3689 struct ieee80211_sub_if_data *sdata = rx->sdata;
3690 struct ieee80211_mgmt *mgmt = (struct ieee80211_mgmt *) rx->skb->data;
3691 int len = rx->skb->len;
3692
3693 if (!ieee80211_is_action(mgmt->frame_control))
3694 return RX_CONTINUE;
3695
3696 switch (mgmt->u.action.category) {
3697 case WLAN_CATEGORY_SA_QUERY:
3698 if (len < (IEEE80211_MIN_ACTION_SIZE +
3699 sizeof(mgmt->u.action.u.sa_query)))
3700 break;
3701
3702 switch (mgmt->u.action.u.sa_query.action) {
3703 case WLAN_ACTION_SA_QUERY_REQUEST:
3704 if (sdata->vif.type != NL80211_IFTYPE_STATION)
3705 break;
3706 ieee80211_process_sa_query_req(sdata, mgmt, len);
3707 goto handled;
3708 }
3709 break;
3710 }
3711
3712 return RX_CONTINUE;
3713
3714 handled:
3715 if (rx->sta)
3716 rx->sta->deflink.rx_stats.packets++;
3717 dev_kfree_skb(rx->skb);
3718 return RX_QUEUED;
3719 }
3720
3721 static ieee80211_rx_result debug_noinline
3722 ieee80211_rx_h_action_return(struct ieee80211_rx_data *rx)
3723 {
3724 struct ieee80211_local *local = rx->local;
3725 struct ieee80211_mgmt *mgmt = (struct ieee80211_mgmt *) rx->skb->data;
3726 struct sk_buff *nskb;
3727 struct ieee80211_sub_if_data *sdata = rx->sdata;
3728 struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(rx->skb);
3729
3730 if (!ieee80211_is_action(mgmt->frame_control))
3731 return RX_CONTINUE;
3732
3733
3734
3735
3736
3737
3738
3739
3740
3741
3742
3743 if (!(status->rx_flags & IEEE80211_RX_MALFORMED_ACTION_FRM) &&
3744 (sdata->vif.type == NL80211_IFTYPE_AP ||
3745 sdata->vif.type == NL80211_IFTYPE_AP_VLAN))
3746 return RX_DROP_MONITOR;
3747
3748 if (is_multicast_ether_addr(mgmt->da))
3749 return RX_DROP_MONITOR;
3750
3751
3752 if (mgmt->u.action.category & 0x80)
3753 return RX_DROP_UNUSABLE;
3754
3755 nskb = skb_copy_expand(rx->skb, local->hw.extra_tx_headroom, 0,
3756 GFP_ATOMIC);
3757 if (nskb) {
3758 struct ieee80211_mgmt *nmgmt = (void *)nskb->data;
3759
3760 nmgmt->u.action.category |= 0x80;
3761 memcpy(nmgmt->da, nmgmt->sa, ETH_ALEN);
3762 memcpy(nmgmt->sa, rx->sdata->vif.addr, ETH_ALEN);
3763
3764 memset(nskb->cb, 0, sizeof(nskb->cb));
3765
3766 if (rx->sdata->vif.type == NL80211_IFTYPE_P2P_DEVICE) {
3767 struct ieee80211_tx_info *info = IEEE80211_SKB_CB(nskb);
3768
3769 info->flags = IEEE80211_TX_CTL_TX_OFFCHAN |
3770 IEEE80211_TX_INTFL_OFFCHAN_TX_OK |
3771 IEEE80211_TX_CTL_NO_CCK_RATE;
3772 if (ieee80211_hw_check(&local->hw, QUEUE_CONTROL))
3773 info->hw_queue =
3774 local->hw.offchannel_tx_hw_queue;
3775 }
3776
3777 __ieee80211_tx_skb_tid_band(rx->sdata, nskb, 7, -1,
3778 status->band);
3779 }
3780 dev_kfree_skb(rx->skb);
3781 return RX_QUEUED;
3782 }
3783
3784 static ieee80211_rx_result debug_noinline
3785 ieee80211_rx_h_ext(struct ieee80211_rx_data *rx)
3786 {
3787 struct ieee80211_sub_if_data *sdata = rx->sdata;
3788 struct ieee80211_hdr *hdr = (void *)rx->skb->data;
3789
3790 if (!ieee80211_is_ext(hdr->frame_control))
3791 return RX_CONTINUE;
3792
3793 if (sdata->vif.type != NL80211_IFTYPE_STATION)
3794 return RX_DROP_MONITOR;
3795
3796
3797 ieee80211_queue_skb_to_iface(sdata, rx->sta, rx->skb);
3798
3799 return RX_QUEUED;
3800 }
3801
3802 static ieee80211_rx_result debug_noinline
3803 ieee80211_rx_h_mgmt(struct ieee80211_rx_data *rx)
3804 {
3805 struct ieee80211_sub_if_data *sdata = rx->sdata;
3806 struct ieee80211_mgmt *mgmt = (void *)rx->skb->data;
3807 __le16 stype;
3808
3809 stype = mgmt->frame_control & cpu_to_le16(IEEE80211_FCTL_STYPE);
3810
3811 if (!ieee80211_vif_is_mesh(&sdata->vif) &&
3812 sdata->vif.type != NL80211_IFTYPE_ADHOC &&
3813 sdata->vif.type != NL80211_IFTYPE_OCB &&
3814 sdata->vif.type != NL80211_IFTYPE_STATION)
3815 return RX_DROP_MONITOR;
3816
3817 switch (stype) {
3818 case cpu_to_le16(IEEE80211_STYPE_AUTH):
3819 case cpu_to_le16(IEEE80211_STYPE_BEACON):
3820 case cpu_to_le16(IEEE80211_STYPE_PROBE_RESP):
3821
3822 break;
3823 case cpu_to_le16(IEEE80211_STYPE_DEAUTH):
3824 if (is_multicast_ether_addr(mgmt->da) &&
3825 !is_broadcast_ether_addr(mgmt->da))
3826 return RX_DROP_MONITOR;
3827
3828
3829 if (sdata->vif.type != NL80211_IFTYPE_STATION &&
3830 sdata->vif.type != NL80211_IFTYPE_ADHOC)
3831 return RX_DROP_MONITOR;
3832 break;
3833 case cpu_to_le16(IEEE80211_STYPE_ASSOC_RESP):
3834 case cpu_to_le16(IEEE80211_STYPE_REASSOC_RESP):
3835 case cpu_to_le16(IEEE80211_STYPE_DISASSOC):
3836 if (is_multicast_ether_addr(mgmt->da) &&
3837 !is_broadcast_ether_addr(mgmt->da))
3838 return RX_DROP_MONITOR;
3839
3840
3841 if (sdata->vif.type != NL80211_IFTYPE_STATION)
3842 return RX_DROP_MONITOR;
3843 break;
3844 case cpu_to_le16(IEEE80211_STYPE_PROBE_REQ):
3845
3846 if (sdata->vif.type != NL80211_IFTYPE_ADHOC &&
3847 sdata->vif.type != NL80211_IFTYPE_MESH_POINT)
3848 return RX_DROP_MONITOR;
3849 break;
3850 default:
3851 return RX_DROP_MONITOR;
3852 }
3853
3854 ieee80211_queue_skb_to_iface(sdata, rx->sta, rx->skb);
3855
3856 return RX_QUEUED;
3857 }
3858
3859 static void ieee80211_rx_cooked_monitor(struct ieee80211_rx_data *rx,
3860 struct ieee80211_rate *rate)
3861 {
3862 struct ieee80211_sub_if_data *sdata;
3863 struct ieee80211_local *local = rx->local;
3864 struct sk_buff *skb = rx->skb, *skb2;
3865 struct net_device *prev_dev = NULL;
3866 struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(skb);
3867 int needed_headroom;
3868
3869
3870
3871
3872
3873 if (rx->flags & IEEE80211_RX_CMNTR)
3874 goto out_free_skb;
3875 rx->flags |= IEEE80211_RX_CMNTR;
3876
3877
3878 if (!local->cooked_mntrs)
3879 goto out_free_skb;
3880
3881
3882 status->flag &= ~RX_FLAG_RADIOTAP_VENDOR_DATA;
3883
3884 needed_headroom = ieee80211_rx_radiotap_hdrlen(local, status, skb);
3885
3886 if (skb_headroom(skb) < needed_headroom &&
3887 pskb_expand_head(skb, needed_headroom, 0, GFP_ATOMIC))
3888 goto out_free_skb;
3889
3890
3891 ieee80211_add_rx_radiotap_header(local, skb, rate, needed_headroom,
3892 false);
3893
3894 skb_reset_mac_header(skb);
3895 skb->ip_summed = CHECKSUM_UNNECESSARY;
3896 skb->pkt_type = PACKET_OTHERHOST;
3897 skb->protocol = htons(ETH_P_802_2);
3898
3899 list_for_each_entry_rcu(sdata, &local->interfaces, list) {
3900 if (!ieee80211_sdata_running(sdata))
3901 continue;
3902
3903 if (sdata->vif.type != NL80211_IFTYPE_MONITOR ||
3904 !(sdata->u.mntr.flags & MONITOR_FLAG_COOK_FRAMES))
3905 continue;
3906
3907 if (prev_dev) {
3908 skb2 = skb_clone(skb, GFP_ATOMIC);
3909 if (skb2) {
3910 skb2->dev = prev_dev;
3911 netif_receive_skb(skb2);
3912 }
3913 }
3914
3915 prev_dev = sdata->dev;
3916 dev_sw_netstats_rx_add(sdata->dev, skb->len);
3917 }
3918
3919 if (prev_dev) {
3920 skb->dev = prev_dev;
3921 netif_receive_skb(skb);
3922 return;
3923 }
3924
3925 out_free_skb:
3926 dev_kfree_skb(skb);
3927 }
3928
3929 static void ieee80211_rx_handlers_result(struct ieee80211_rx_data *rx,
3930 ieee80211_rx_result res)
3931 {
3932 switch (res) {
3933 case RX_DROP_MONITOR:
3934 I802_DEBUG_INC(rx->sdata->local->rx_handlers_drop);
3935 if (rx->sta)
3936 rx->sta->deflink.rx_stats.dropped++;
3937 fallthrough;
3938 case RX_CONTINUE: {
3939 struct ieee80211_rate *rate = NULL;
3940 struct ieee80211_supported_band *sband;
3941 struct ieee80211_rx_status *status;
3942
3943 status = IEEE80211_SKB_RXCB((rx->skb));
3944
3945 sband = rx->local->hw.wiphy->bands[status->band];
3946 if (status->encoding == RX_ENC_LEGACY)
3947 rate = &sband->bitrates[status->rate_idx];
3948
3949 ieee80211_rx_cooked_monitor(rx, rate);
3950 break;
3951 }
3952 case RX_DROP_UNUSABLE:
3953 I802_DEBUG_INC(rx->sdata->local->rx_handlers_drop);
3954 if (rx->sta)
3955 rx->sta->deflink.rx_stats.dropped++;
3956 dev_kfree_skb(rx->skb);
3957 break;
3958 case RX_QUEUED:
3959 I802_DEBUG_INC(rx->sdata->local->rx_handlers_queued);
3960 break;
3961 }
3962 }
3963
3964 static void ieee80211_rx_handlers(struct ieee80211_rx_data *rx,
3965 struct sk_buff_head *frames)
3966 {
3967 ieee80211_rx_result res = RX_DROP_MONITOR;
3968 struct sk_buff *skb;
3969
3970 #define CALL_RXH(rxh) \
3971 do { \
3972 res = rxh(rx); \
3973 if (res != RX_CONTINUE) \
3974 goto rxh_next; \
3975 } while (0)
3976
3977
3978
3979
3980
3981
3982
3983 spin_lock_bh(&rx->local->rx_path_lock);
3984
3985 while ((skb = __skb_dequeue(frames))) {
3986
3987
3988
3989
3990
3991 rx->skb = skb;
3992
3993 if (WARN_ON_ONCE(!rx->link))
3994 goto rxh_next;
3995
3996 CALL_RXH(ieee80211_rx_h_check_more_data);
3997 CALL_RXH(ieee80211_rx_h_uapsd_and_pspoll);
3998 CALL_RXH(ieee80211_rx_h_sta_process);
3999 CALL_RXH(ieee80211_rx_h_decrypt);
4000 CALL_RXH(ieee80211_rx_h_defragment);
4001 CALL_RXH(ieee80211_rx_h_michael_mic_verify);
4002
4003 #ifdef CONFIG_MAC80211_MESH
4004 if (ieee80211_vif_is_mesh(&rx->sdata->vif))
4005 CALL_RXH(ieee80211_rx_h_mesh_fwding);
4006 #endif
4007 CALL_RXH(ieee80211_rx_h_amsdu);
4008 CALL_RXH(ieee80211_rx_h_data);
4009
4010
4011 res = ieee80211_rx_h_ctrl(rx, frames);
4012 if (res != RX_CONTINUE)
4013 goto rxh_next;
4014
4015 CALL_RXH(ieee80211_rx_h_mgmt_check);
4016 CALL_RXH(ieee80211_rx_h_action);
4017 CALL_RXH(ieee80211_rx_h_userspace_mgmt);
4018 CALL_RXH(ieee80211_rx_h_action_post_userspace);
4019 CALL_RXH(ieee80211_rx_h_action_return);
4020 CALL_RXH(ieee80211_rx_h_ext);
4021 CALL_RXH(ieee80211_rx_h_mgmt);
4022
4023 rxh_next:
4024 ieee80211_rx_handlers_result(rx, res);
4025
4026 #undef CALL_RXH
4027 }
4028
4029 spin_unlock_bh(&rx->local->rx_path_lock);
4030 }
4031
4032 static void ieee80211_invoke_rx_handlers(struct ieee80211_rx_data *rx)
4033 {
4034 struct sk_buff_head reorder_release;
4035 ieee80211_rx_result res = RX_DROP_MONITOR;
4036
4037 __skb_queue_head_init(&reorder_release);
4038
4039 #define CALL_RXH(rxh) \
4040 do { \
4041 res = rxh(rx); \
4042 if (res != RX_CONTINUE) \
4043 goto rxh_next; \
4044 } while (0)
4045
4046 CALL_RXH(ieee80211_rx_h_check_dup);
4047 CALL_RXH(ieee80211_rx_h_check);
4048
4049 ieee80211_rx_reorder_ampdu(rx, &reorder_release);
4050
4051 ieee80211_rx_handlers(rx, &reorder_release);
4052 return;
4053
4054 rxh_next:
4055 ieee80211_rx_handlers_result(rx, res);
4056
4057 #undef CALL_RXH
4058 }
4059
4060
4061
4062
4063
4064 void ieee80211_release_reorder_timeout(struct sta_info *sta, int tid)
4065 {
4066 struct sk_buff_head frames;
4067 struct ieee80211_rx_data rx = {
4068 .sta = sta,
4069 .sdata = sta->sdata,
4070 .local = sta->local,
4071
4072 .security_idx = tid,
4073 .seqno_idx = tid,
4074 .link_id = -1,
4075 };
4076 struct tid_ampdu_rx *tid_agg_rx;
4077 u8 link_id;
4078
4079 tid_agg_rx = rcu_dereference(sta->ampdu_mlme.tid_rx[tid]);
4080 if (!tid_agg_rx)
4081 return;
4082
4083 __skb_queue_head_init(&frames);
4084
4085 spin_lock(&tid_agg_rx->reorder_lock);
4086 ieee80211_sta_reorder_release(sta->sdata, tid_agg_rx, &frames);
4087 spin_unlock(&tid_agg_rx->reorder_lock);
4088
4089 if (!skb_queue_empty(&frames)) {
4090 struct ieee80211_event event = {
4091 .type = BA_FRAME_TIMEOUT,
4092 .u.ba.tid = tid,
4093 .u.ba.sta = &sta->sta,
4094 };
4095 drv_event_callback(rx.local, rx.sdata, &event);
4096 }
4097
4098 link_id = sta->sta.valid_links ? ffs(sta->sta.valid_links) - 1 : 0;
4099 rx.link = rcu_dereference(sta->sdata->link[link_id]);
4100
4101 ieee80211_rx_handlers(&rx, &frames);
4102 }
4103
4104 void ieee80211_mark_rx_ba_filtered_frames(struct ieee80211_sta *pubsta, u8 tid,
4105 u16 ssn, u64 filtered,
4106 u16 received_mpdus)
4107 {
4108 struct sta_info *sta;
4109 struct tid_ampdu_rx *tid_agg_rx;
4110 struct sk_buff_head frames;
4111 struct ieee80211_rx_data rx = {
4112
4113 .security_idx = tid,
4114 .seqno_idx = tid,
4115 .link_id = -1,
4116 };
4117 int i, diff;
4118
4119 if (WARN_ON(!pubsta || tid >= IEEE80211_NUM_TIDS))
4120 return;
4121
4122 __skb_queue_head_init(&frames);
4123
4124 sta = container_of(pubsta, struct sta_info, sta);
4125
4126 rx.sta = sta;
4127 rx.sdata = sta->sdata;
4128 rx.link = &rx.sdata->deflink;
4129 rx.local = sta->local;
4130
4131 rcu_read_lock();
4132 tid_agg_rx = rcu_dereference(sta->ampdu_mlme.tid_rx[tid]);
4133 if (!tid_agg_rx)
4134 goto out;
4135
4136 spin_lock_bh(&tid_agg_rx->reorder_lock);
4137
4138 if (received_mpdus >= IEEE80211_SN_MODULO >> 1) {
4139 int release;
4140
4141
4142 release = (tid_agg_rx->head_seq_num + tid_agg_rx->buf_size) %
4143 IEEE80211_SN_MODULO;
4144 ieee80211_release_reorder_frames(sta->sdata, tid_agg_rx,
4145 release, &frames);
4146
4147 tid_agg_rx->head_seq_num = ssn;
4148 } else {
4149 ieee80211_release_reorder_frames(sta->sdata, tid_agg_rx, ssn,
4150 &frames);
4151 }
4152
4153
4154
4155 diff = (tid_agg_rx->head_seq_num - ssn) & IEEE80211_SN_MASK;
4156 if (diff >= tid_agg_rx->buf_size) {
4157 tid_agg_rx->reorder_buf_filtered = 0;
4158 goto release;
4159 }
4160 filtered = filtered >> diff;
4161 ssn += diff;
4162
4163
4164 for (i = 0; i < tid_agg_rx->buf_size; i++) {
4165 int index = (ssn + i) % tid_agg_rx->buf_size;
4166
4167 tid_agg_rx->reorder_buf_filtered &= ~BIT_ULL(index);
4168 if (filtered & BIT_ULL(i))
4169 tid_agg_rx->reorder_buf_filtered |= BIT_ULL(index);
4170 }
4171
4172
4173 ieee80211_sta_reorder_release(sta->sdata, tid_agg_rx, &frames);
4174
4175 release:
4176 spin_unlock_bh(&tid_agg_rx->reorder_lock);
4177
4178 ieee80211_rx_handlers(&rx, &frames);
4179
4180 out:
4181 rcu_read_unlock();
4182 }
4183 EXPORT_SYMBOL(ieee80211_mark_rx_ba_filtered_frames);
4184
4185
4186
4187 static inline int ieee80211_bssid_match(const u8 *raddr, const u8 *addr)
4188 {
4189 return ether_addr_equal(raddr, addr) ||
4190 is_broadcast_ether_addr(raddr);
4191 }
4192
4193 static bool ieee80211_accept_frame(struct ieee80211_rx_data *rx)
4194 {
4195 struct ieee80211_sub_if_data *sdata = rx->sdata;
4196 struct sk_buff *skb = rx->skb;
4197 struct ieee80211_hdr *hdr = (void *)skb->data;
4198 struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(skb);
4199 u8 *bssid = ieee80211_get_bssid(hdr, skb->len, sdata->vif.type);
4200 bool multicast = is_multicast_ether_addr(hdr->addr1) ||
4201 ieee80211_is_s1g_beacon(hdr->frame_control);
4202
4203 switch (sdata->vif.type) {
4204 case NL80211_IFTYPE_STATION:
4205 if (!bssid && !sdata->u.mgd.use_4addr)
4206 return false;
4207 if (ieee80211_is_robust_mgmt_frame(skb) && !rx->sta)
4208 return false;
4209 if (multicast)
4210 return true;
4211 return ieee80211_is_our_addr(sdata, hdr->addr1, &rx->link_id);
4212 case NL80211_IFTYPE_ADHOC:
4213 if (!bssid)
4214 return false;
4215 if (ether_addr_equal(sdata->vif.addr, hdr->addr2) ||
4216 ether_addr_equal(sdata->u.ibss.bssid, hdr->addr2) ||
4217 !is_valid_ether_addr(hdr->addr2))
4218 return false;
4219 if (ieee80211_is_beacon(hdr->frame_control))
4220 return true;
4221 if (!ieee80211_bssid_match(bssid, sdata->u.ibss.bssid))
4222 return false;
4223 if (!multicast &&
4224 !ether_addr_equal(sdata->vif.addr, hdr->addr1))
4225 return false;
4226 if (!rx->sta) {
4227 int rate_idx;
4228 if (status->encoding != RX_ENC_LEGACY)
4229 rate_idx = 0;
4230 else
4231 rate_idx = status->rate_idx;
4232 ieee80211_ibss_rx_no_sta(sdata, bssid, hdr->addr2,
4233 BIT(rate_idx));
4234 }
4235 return true;
4236 case NL80211_IFTYPE_OCB:
4237 if (!bssid)
4238 return false;
4239 if (!ieee80211_is_data_present(hdr->frame_control))
4240 return false;
4241 if (!is_broadcast_ether_addr(bssid))
4242 return false;
4243 if (!multicast &&
4244 !ether_addr_equal(sdata->dev->dev_addr, hdr->addr1))
4245 return false;
4246 if (!rx->sta) {
4247 int rate_idx;
4248 if (status->encoding != RX_ENC_LEGACY)
4249 rate_idx = 0;
4250 else
4251 rate_idx = status->rate_idx;
4252 ieee80211_ocb_rx_no_sta(sdata, bssid, hdr->addr2,
4253 BIT(rate_idx));
4254 }
4255 return true;
4256 case NL80211_IFTYPE_MESH_POINT:
4257 if (ether_addr_equal(sdata->vif.addr, hdr->addr2))
4258 return false;
4259 if (multicast)
4260 return true;
4261 return ether_addr_equal(sdata->vif.addr, hdr->addr1);
4262 case NL80211_IFTYPE_AP_VLAN:
4263 case NL80211_IFTYPE_AP:
4264 if (!bssid)
4265 return ieee80211_is_our_addr(sdata, hdr->addr1,
4266 &rx->link_id);
4267
4268 if (!is_broadcast_ether_addr(bssid) &&
4269 !ieee80211_is_our_addr(sdata, bssid, NULL)) {
4270
4271
4272
4273
4274
4275
4276 if (!multicast &&
4277 !ieee80211_is_our_addr(sdata, hdr->addr1,
4278 &rx->link_id))
4279 return false;
4280 if (ieee80211_is_public_action(hdr, skb->len))
4281 return true;
4282 return ieee80211_is_beacon(hdr->frame_control);
4283 }
4284
4285 if (!ieee80211_has_tods(hdr->frame_control)) {
4286
4287 if (ieee80211_is_data(hdr->frame_control))
4288 return false;
4289
4290 if (ieee80211_is_action(hdr->frame_control) &&
4291 !is_broadcast_ether_addr(bssid) &&
4292 !ether_addr_equal(bssid, hdr->addr1))
4293 return false;
4294 }
4295
4296
4297
4298
4299
4300
4301
4302
4303
4304
4305
4306
4307
4308
4309
4310
4311
4312
4313 if (ieee80211_is_data(hdr->frame_control) && multicast)
4314 return false;
4315
4316 return true;
4317 case NL80211_IFTYPE_P2P_DEVICE:
4318 return ieee80211_is_public_action(hdr, skb->len) ||
4319 ieee80211_is_probe_req(hdr->frame_control) ||
4320 ieee80211_is_probe_resp(hdr->frame_control) ||
4321 ieee80211_is_beacon(hdr->frame_control);
4322 case NL80211_IFTYPE_NAN:
4323
4324 return false;
4325 default:
4326 break;
4327 }
4328
4329 WARN_ON_ONCE(1);
4330 return false;
4331 }
4332
4333 void ieee80211_check_fast_rx(struct sta_info *sta)
4334 {
4335 struct ieee80211_sub_if_data *sdata = sta->sdata;
4336 struct ieee80211_local *local = sdata->local;
4337 struct ieee80211_key *key;
4338 struct ieee80211_fast_rx fastrx = {
4339 .dev = sdata->dev,
4340 .vif_type = sdata->vif.type,
4341 .control_port_protocol = sdata->control_port_protocol,
4342 }, *old, *new = NULL;
4343 bool set_offload = false;
4344 bool assign = false;
4345 bool offload;
4346
4347
4348 __acquire(check_fast_rx);
4349
4350 BUILD_BUG_ON(sizeof(fastrx.rfc1042_hdr) != sizeof(rfc1042_header));
4351 BUILD_BUG_ON(sizeof(fastrx.rfc1042_hdr) != ETH_ALEN);
4352 ether_addr_copy(fastrx.rfc1042_hdr, rfc1042_header);
4353 ether_addr_copy(fastrx.vif_addr, sdata->vif.addr);
4354
4355 fastrx.uses_rss = ieee80211_hw_check(&local->hw, USES_RSS);
4356
4357
4358 if (ieee80211_hw_check(&local->hw, AMPDU_AGGREGATION) &&
4359 !ieee80211_hw_check(&local->hw, SUPPORTS_REORDERING_BUFFER))
4360 goto clear;
4361
4362 switch (sdata->vif.type) {
4363 case NL80211_IFTYPE_STATION:
4364 if (sta->sta.tdls) {
4365 fastrx.da_offs = offsetof(struct ieee80211_hdr, addr1);
4366 fastrx.sa_offs = offsetof(struct ieee80211_hdr, addr2);
4367 fastrx.expected_ds_bits = 0;
4368 } else {
4369 fastrx.da_offs = offsetof(struct ieee80211_hdr, addr1);
4370 fastrx.sa_offs = offsetof(struct ieee80211_hdr, addr3);
4371 fastrx.expected_ds_bits =
4372 cpu_to_le16(IEEE80211_FCTL_FROMDS);
4373 }
4374
4375 if (sdata->u.mgd.use_4addr && !sta->sta.tdls) {
4376 fastrx.expected_ds_bits |=
4377 cpu_to_le16(IEEE80211_FCTL_TODS);
4378 fastrx.da_offs = offsetof(struct ieee80211_hdr, addr3);
4379 fastrx.sa_offs = offsetof(struct ieee80211_hdr, addr4);
4380 }
4381
4382 if (!sdata->u.mgd.powersave)
4383 break;
4384
4385
4386 if (ieee80211_hw_check(&local->hw, PS_NULLFUNC_STACK))
4387 goto clear;
4388 if (ieee80211_hw_check(&local->hw, SUPPORTS_PS) &&
4389 !ieee80211_hw_check(&local->hw, SUPPORTS_DYNAMIC_PS))
4390 goto clear;
4391 break;
4392 case NL80211_IFTYPE_AP_VLAN:
4393 case NL80211_IFTYPE_AP:
4394
4395
4396
4397 if (!ieee80211_hw_check(&local->hw, AP_LINK_PS))
4398 goto clear;
4399 fastrx.da_offs = offsetof(struct ieee80211_hdr, addr3);
4400 fastrx.sa_offs = offsetof(struct ieee80211_hdr, addr2);
4401 fastrx.expected_ds_bits = cpu_to_le16(IEEE80211_FCTL_TODS);
4402
4403 fastrx.internal_forward =
4404 !(sdata->flags & IEEE80211_SDATA_DONT_BRIDGE_PACKETS) &&
4405 (sdata->vif.type != NL80211_IFTYPE_AP_VLAN ||
4406 !sdata->u.vlan.sta);
4407
4408 if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN &&
4409 sdata->u.vlan.sta) {
4410 fastrx.expected_ds_bits |=
4411 cpu_to_le16(IEEE80211_FCTL_FROMDS);
4412 fastrx.sa_offs = offsetof(struct ieee80211_hdr, addr4);
4413 fastrx.internal_forward = 0;
4414 }
4415
4416 break;
4417 default:
4418 goto clear;
4419 }
4420
4421 if (!test_sta_flag(sta, WLAN_STA_AUTHORIZED))
4422 goto clear;
4423
4424 rcu_read_lock();
4425 key = rcu_dereference(sta->ptk[sta->ptk_idx]);
4426 if (!key)
4427 key = rcu_dereference(sdata->default_unicast_key);
4428 if (key) {
4429 switch (key->conf.cipher) {
4430 case WLAN_CIPHER_SUITE_TKIP:
4431
4432 goto clear_rcu;
4433 case WLAN_CIPHER_SUITE_CCMP:
4434 case WLAN_CIPHER_SUITE_CCMP_256:
4435 case WLAN_CIPHER_SUITE_GCMP:
4436 case WLAN_CIPHER_SUITE_GCMP_256:
4437 break;
4438 default:
4439
4440
4441
4442 goto clear_rcu;
4443 }
4444
4445 fastrx.key = true;
4446 fastrx.icv_len = key->conf.icv_len;
4447 }
4448
4449 assign = true;
4450 clear_rcu:
4451 rcu_read_unlock();
4452 clear:
4453 __release(check_fast_rx);
4454
4455 if (assign)
4456 new = kmemdup(&fastrx, sizeof(fastrx), GFP_KERNEL);
4457
4458 offload = assign &&
4459 (sdata->vif.offload_flags & IEEE80211_OFFLOAD_DECAP_ENABLED);
4460
4461 if (offload)
4462 set_offload = !test_and_set_sta_flag(sta, WLAN_STA_DECAP_OFFLOAD);
4463 else
4464 set_offload = test_and_clear_sta_flag(sta, WLAN_STA_DECAP_OFFLOAD);
4465
4466 if (set_offload)
4467 drv_sta_set_decap_offload(local, sdata, &sta->sta, assign);
4468
4469 spin_lock_bh(&sta->lock);
4470 old = rcu_dereference_protected(sta->fast_rx, true);
4471 rcu_assign_pointer(sta->fast_rx, new);
4472 spin_unlock_bh(&sta->lock);
4473
4474 if (old)
4475 kfree_rcu(old, rcu_head);
4476 }
4477
4478 void ieee80211_clear_fast_rx(struct sta_info *sta)
4479 {
4480 struct ieee80211_fast_rx *old;
4481
4482 spin_lock_bh(&sta->lock);
4483 old = rcu_dereference_protected(sta->fast_rx, true);
4484 RCU_INIT_POINTER(sta->fast_rx, NULL);
4485 spin_unlock_bh(&sta->lock);
4486
4487 if (old)
4488 kfree_rcu(old, rcu_head);
4489 }
4490
4491 void __ieee80211_check_fast_rx_iface(struct ieee80211_sub_if_data *sdata)
4492 {
4493 struct ieee80211_local *local = sdata->local;
4494 struct sta_info *sta;
4495
4496 lockdep_assert_held(&local->sta_mtx);
4497
4498 list_for_each_entry(sta, &local->sta_list, list) {
4499 if (sdata != sta->sdata &&
4500 (!sta->sdata->bss || sta->sdata->bss != sdata->bss))
4501 continue;
4502 ieee80211_check_fast_rx(sta);
4503 }
4504 }
4505
4506 void ieee80211_check_fast_rx_iface(struct ieee80211_sub_if_data *sdata)
4507 {
4508 struct ieee80211_local *local = sdata->local;
4509
4510 mutex_lock(&local->sta_mtx);
4511 __ieee80211_check_fast_rx_iface(sdata);
4512 mutex_unlock(&local->sta_mtx);
4513 }
4514
4515 static void ieee80211_rx_8023(struct ieee80211_rx_data *rx,
4516 struct ieee80211_fast_rx *fast_rx,
4517 int orig_len)
4518 {
4519 struct ieee80211_sta_rx_stats *stats;
4520 struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(rx->skb);
4521 struct sta_info *sta = rx->sta;
4522 struct sk_buff *skb = rx->skb;
4523 void *sa = skb->data + ETH_ALEN;
4524 void *da = skb->data;
4525
4526 stats = &sta->deflink.rx_stats;
4527 if (fast_rx->uses_rss)
4528 stats = this_cpu_ptr(sta->deflink.pcpu_rx_stats);
4529
4530
4531 if (!(status->flag & RX_FLAG_NO_SIGNAL_VAL)) {
4532 stats->last_signal = status->signal;
4533 if (!fast_rx->uses_rss)
4534 ewma_signal_add(&sta->deflink.rx_stats_avg.signal,
4535 -status->signal);
4536 }
4537
4538 if (status->chains) {
4539 int i;
4540
4541 stats->chains = status->chains;
4542 for (i = 0; i < ARRAY_SIZE(status->chain_signal); i++) {
4543 int signal = status->chain_signal[i];
4544
4545 if (!(status->chains & BIT(i)))
4546 continue;
4547
4548 stats->chain_signal_last[i] = signal;
4549 if (!fast_rx->uses_rss)
4550 ewma_signal_add(&sta->deflink.rx_stats_avg.chain_signal[i],
4551 -signal);
4552 }
4553 }
4554
4555
4556 stats->last_rx = jiffies;
4557 stats->last_rate = sta_stats_encode_rate(status);
4558
4559 stats->fragments++;
4560 stats->packets++;
4561
4562 skb->dev = fast_rx->dev;
4563
4564 dev_sw_netstats_rx_add(fast_rx->dev, skb->len);
4565
4566
4567
4568
4569
4570
4571 u64_stats_update_begin(&stats->syncp);
4572 stats->msdu[rx->seqno_idx]++;
4573 stats->bytes += orig_len;
4574 u64_stats_update_end(&stats->syncp);
4575
4576 if (fast_rx->internal_forward) {
4577 struct sk_buff *xmit_skb = NULL;
4578 if (is_multicast_ether_addr(da)) {
4579 xmit_skb = skb_copy(skb, GFP_ATOMIC);
4580 } else if (!ether_addr_equal(da, sa) &&
4581 sta_info_get(rx->sdata, da)) {
4582 xmit_skb = skb;
4583 skb = NULL;
4584 }
4585
4586 if (xmit_skb) {
4587
4588
4589
4590
4591
4592 xmit_skb->priority += 256;
4593 xmit_skb->protocol = htons(ETH_P_802_3);
4594 skb_reset_network_header(xmit_skb);
4595 skb_reset_mac_header(xmit_skb);
4596 dev_queue_xmit(xmit_skb);
4597 }
4598
4599 if (!skb)
4600 return;
4601 }
4602
4603
4604 skb->protocol = eth_type_trans(skb, fast_rx->dev);
4605 ieee80211_deliver_skb_to_local_stack(skb, rx);
4606 }
4607
4608 static bool ieee80211_invoke_fast_rx(struct ieee80211_rx_data *rx,
4609 struct ieee80211_fast_rx *fast_rx)
4610 {
4611 struct sk_buff *skb = rx->skb;
4612 struct ieee80211_hdr *hdr = (void *)skb->data;
4613 struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(skb);
4614 struct sta_info *sta = rx->sta;
4615 int orig_len = skb->len;
4616 int hdrlen = ieee80211_hdrlen(hdr->frame_control);
4617 int snap_offs = hdrlen;
4618 struct {
4619 u8 snap[sizeof(rfc1042_header)];
4620 __be16 proto;
4621 } *payload __aligned(2);
4622 struct {
4623 u8 da[ETH_ALEN];
4624 u8 sa[ETH_ALEN];
4625 } addrs __aligned(2);
4626 struct ieee80211_sta_rx_stats *stats = &sta->deflink.rx_stats;
4627
4628
4629
4630
4631
4632 if (!(status->flag & RX_FLAG_DUP_VALIDATED))
4633 return false;
4634
4635 #define FAST_RX_CRYPT_FLAGS (RX_FLAG_PN_VALIDATED | RX_FLAG_DECRYPTED)
4636
4637
4638
4639
4640
4641 if (fast_rx->key &&
4642 (status->flag & FAST_RX_CRYPT_FLAGS) != FAST_RX_CRYPT_FLAGS)
4643 return false;
4644
4645 if (unlikely(!ieee80211_is_data_present(hdr->frame_control)))
4646 return false;
4647
4648 if (unlikely(ieee80211_is_frag(hdr)))
4649 return false;
4650
4651
4652
4653
4654
4655
4656
4657
4658
4659
4660 if (!ether_addr_equal(fast_rx->vif_addr, hdr->addr1))
4661 return false;
4662
4663 if ((hdr->frame_control & cpu_to_le16(IEEE80211_FCTL_FROMDS |
4664 IEEE80211_FCTL_TODS)) !=
4665 fast_rx->expected_ds_bits)
4666 return false;
4667
4668
4669
4670
4671 if (fast_rx->key && !(status->flag & RX_FLAG_IV_STRIPPED)) {
4672
4673 snap_offs += IEEE80211_CCMP_HDR_LEN;
4674 }
4675
4676 if (!(status->rx_flags & IEEE80211_RX_AMSDU)) {
4677 if (!pskb_may_pull(skb, snap_offs + sizeof(*payload)))
4678 goto drop;
4679
4680 payload = (void *)(skb->data + snap_offs);
4681
4682 if (!ether_addr_equal(payload->snap, fast_rx->rfc1042_hdr))
4683 return false;
4684
4685
4686
4687
4688
4689
4690 if (unlikely(payload->proto == cpu_to_be16(ETH_P_TDLS) ||
4691 payload->proto == fast_rx->control_port_protocol))
4692 return false;
4693 }
4694
4695
4696
4697 if (rx->key && !(status->flag & RX_FLAG_MIC_STRIPPED) &&
4698 pskb_trim(skb, skb->len - fast_rx->icv_len))
4699 goto drop;
4700
4701 if (rx->key && !ieee80211_has_protected(hdr->frame_control))
4702 goto drop;
4703
4704 if (status->rx_flags & IEEE80211_RX_AMSDU) {
4705 if (__ieee80211_rx_h_amsdu(rx, snap_offs - hdrlen) !=
4706 RX_QUEUED)
4707 goto drop;
4708
4709 return true;
4710 }
4711
4712
4713 ether_addr_copy(addrs.da, skb->data + fast_rx->da_offs);
4714 ether_addr_copy(addrs.sa, skb->data + fast_rx->sa_offs);
4715 skb_postpull_rcsum(skb, skb->data + snap_offs,
4716 sizeof(rfc1042_header) + 2);
4717
4718 skb_pull(skb, snap_offs + sizeof(rfc1042_header));
4719
4720 memcpy(skb_push(skb, sizeof(addrs)), &addrs, sizeof(addrs));
4721
4722 ieee80211_rx_8023(rx, fast_rx, orig_len);
4723
4724 return true;
4725 drop:
4726 dev_kfree_skb(skb);
4727 if (fast_rx->uses_rss)
4728 stats = this_cpu_ptr(sta->deflink.pcpu_rx_stats);
4729
4730 stats->dropped++;
4731 return true;
4732 }
4733
4734
4735
4736
4737
4738
4739
4740 static bool ieee80211_prepare_and_rx_handle(struct ieee80211_rx_data *rx,
4741 struct sk_buff *skb, bool consume)
4742 {
4743 struct ieee80211_local *local = rx->local;
4744 struct ieee80211_sub_if_data *sdata = rx->sdata;
4745 struct ieee80211_hdr *hdr = (void *)skb->data;
4746 struct link_sta_info *link_sta = NULL;
4747 struct ieee80211_link_data *link;
4748
4749 rx->skb = skb;
4750
4751
4752
4753
4754
4755
4756
4757
4758 if (consume && rx->sta) {
4759 struct ieee80211_fast_rx *fast_rx;
4760
4761 fast_rx = rcu_dereference(rx->sta->fast_rx);
4762 if (fast_rx && ieee80211_invoke_fast_rx(rx, fast_rx))
4763 return true;
4764 }
4765
4766 if (!ieee80211_accept_frame(rx))
4767 return false;
4768
4769 if (rx->link_id >= 0) {
4770 link = rcu_dereference(rx->sdata->link[rx->link_id]);
4771
4772
4773 if (!link)
4774 return true;
4775 rx->link = link;
4776 } else {
4777 rx->link = &sdata->deflink;
4778 }
4779
4780 if (unlikely(!is_multicast_ether_addr(hdr->addr1) &&
4781 rx->link_id >= 0 && rx->sta && rx->sta->sta.mlo)) {
4782 link_sta = rcu_dereference(rx->sta->link[rx->link_id]);
4783
4784 if (WARN_ON_ONCE(!link_sta))
4785 return true;
4786 }
4787
4788 if (!consume) {
4789 struct skb_shared_hwtstamps *shwt;
4790
4791 rx->skb = skb_copy(skb, GFP_ATOMIC);
4792 if (!rx->skb) {
4793 if (net_ratelimit())
4794 wiphy_debug(local->hw.wiphy,
4795 "failed to copy skb for %s\n",
4796 sdata->name);
4797 return true;
4798 }
4799
4800
4801
4802
4803 shwt = skb_hwtstamps(rx->skb);
4804 shwt->hwtstamp = skb_hwtstamps(skb)->hwtstamp;
4805 }
4806
4807 if (unlikely(link_sta)) {
4808
4809 if (ether_addr_equal(link->conf->addr, hdr->addr1))
4810 ether_addr_copy(hdr->addr1, rx->sdata->vif.addr);
4811 if (ether_addr_equal(link_sta->addr, hdr->addr2))
4812 ether_addr_copy(hdr->addr2, rx->sta->addr);
4813
4814 if (!ieee80211_has_tods(hdr->frame_control) &&
4815 !ieee80211_has_fromds(hdr->frame_control)) {
4816 if (ether_addr_equal(link_sta->addr, hdr->addr3))
4817 ether_addr_copy(hdr->addr3, rx->sta->addr);
4818 else if (ether_addr_equal(link->conf->addr, hdr->addr3))
4819 ether_addr_copy(hdr->addr3, rx->sdata->vif.addr);
4820 }
4821
4822 }
4823
4824 ieee80211_invoke_rx_handlers(rx);
4825 return true;
4826 }
4827
4828 static void __ieee80211_rx_handle_8023(struct ieee80211_hw *hw,
4829 struct ieee80211_sta *pubsta,
4830 struct sk_buff *skb,
4831 struct list_head *list)
4832 {
4833 struct ieee80211_local *local = hw_to_local(hw);
4834 struct ieee80211_fast_rx *fast_rx;
4835 struct ieee80211_rx_data rx;
4836
4837 memset(&rx, 0, sizeof(rx));
4838 rx.skb = skb;
4839 rx.local = local;
4840 rx.list = list;
4841 rx.link_id = -1;
4842
4843 I802_DEBUG_INC(local->dot11ReceivedFragmentCount);
4844
4845
4846 if (skb->len < sizeof(struct ethhdr))
4847 goto drop;
4848
4849 if (!pubsta)
4850 goto drop;
4851
4852 rx.sta = container_of(pubsta, struct sta_info, sta);
4853 rx.sdata = rx.sta->sdata;
4854 rx.link = &rx.sdata->deflink;
4855
4856 fast_rx = rcu_dereference(rx.sta->fast_rx);
4857 if (!fast_rx)
4858 goto drop;
4859
4860 ieee80211_rx_8023(&rx, fast_rx, skb->len);
4861 return;
4862
4863 drop:
4864 dev_kfree_skb(skb);
4865 }
4866
4867 static bool ieee80211_rx_for_interface(struct ieee80211_rx_data *rx,
4868 struct sk_buff *skb, bool consume)
4869 {
4870 struct link_sta_info *link_sta;
4871 struct ieee80211_hdr *hdr = (void *)skb->data;
4872
4873
4874
4875
4876
4877
4878
4879 link_sta = link_sta_info_get_bss(rx->sdata, hdr->addr2);
4880 if (link_sta) {
4881 rx->sta = link_sta->sta;
4882 rx->link_id = link_sta->link_id;
4883 } else {
4884 rx->sta = sta_info_get_bss(rx->sdata, hdr->addr2);
4885 }
4886
4887 return ieee80211_prepare_and_rx_handle(rx, skb, consume);
4888 }
4889
4890
4891
4892
4893
4894 static void __ieee80211_rx_handle_packet(struct ieee80211_hw *hw,
4895 struct ieee80211_sta *pubsta,
4896 struct sk_buff *skb,
4897 struct list_head *list)
4898 {
4899 struct ieee80211_local *local = hw_to_local(hw);
4900 struct ieee80211_sub_if_data *sdata;
4901 struct ieee80211_hdr *hdr;
4902 __le16 fc;
4903 struct ieee80211_rx_data rx;
4904 struct ieee80211_sub_if_data *prev;
4905 struct rhlist_head *tmp;
4906 int err = 0;
4907
4908 fc = ((struct ieee80211_hdr *)skb->data)->frame_control;
4909 memset(&rx, 0, sizeof(rx));
4910 rx.skb = skb;
4911 rx.local = local;
4912 rx.list = list;
4913 rx.link_id = -1;
4914
4915 if (ieee80211_is_data(fc) || ieee80211_is_mgmt(fc))
4916 I802_DEBUG_INC(local->dot11ReceivedFragmentCount);
4917
4918 if (ieee80211_is_mgmt(fc)) {
4919
4920 if (skb->len < ieee80211_hdrlen(fc))
4921 err = -ENOBUFS;
4922 else
4923 err = skb_linearize(skb);
4924 } else {
4925 err = !pskb_may_pull(skb, ieee80211_hdrlen(fc));
4926 }
4927
4928 if (err) {
4929 dev_kfree_skb(skb);
4930 return;
4931 }
4932
4933 hdr = (struct ieee80211_hdr *)skb->data;
4934 ieee80211_parse_qos(&rx);
4935 ieee80211_verify_alignment(&rx);
4936
4937 if (unlikely(ieee80211_is_probe_resp(hdr->frame_control) ||
4938 ieee80211_is_beacon(hdr->frame_control) ||
4939 ieee80211_is_s1g_beacon(hdr->frame_control)))
4940 ieee80211_scan_rx(local, skb);
4941
4942 if (ieee80211_is_data(fc)) {
4943 struct sta_info *sta, *prev_sta;
4944
4945 if (pubsta) {
4946 rx.sta = container_of(pubsta, struct sta_info, sta);
4947 rx.sdata = rx.sta->sdata;
4948 if (ieee80211_prepare_and_rx_handle(&rx, skb, true))
4949 return;
4950 goto out;
4951 }
4952
4953 prev_sta = NULL;
4954
4955 for_each_sta_info(local, hdr->addr2, sta, tmp) {
4956 if (!prev_sta) {
4957 prev_sta = sta;
4958 continue;
4959 }
4960
4961 rx.sta = prev_sta;
4962 rx.sdata = prev_sta->sdata;
4963 ieee80211_prepare_and_rx_handle(&rx, skb, false);
4964
4965 prev_sta = sta;
4966 }
4967
4968 if (prev_sta) {
4969 rx.sta = prev_sta;
4970 rx.sdata = prev_sta->sdata;
4971
4972 if (ieee80211_prepare_and_rx_handle(&rx, skb, true))
4973 return;
4974 goto out;
4975 }
4976 }
4977
4978 prev = NULL;
4979
4980 list_for_each_entry_rcu(sdata, &local->interfaces, list) {
4981 if (!ieee80211_sdata_running(sdata))
4982 continue;
4983
4984 if (sdata->vif.type == NL80211_IFTYPE_MONITOR ||
4985 sdata->vif.type == NL80211_IFTYPE_AP_VLAN)
4986 continue;
4987
4988
4989
4990
4991
4992
4993
4994 if (!prev) {
4995 prev = sdata;
4996 continue;
4997 }
4998
4999 rx.sdata = prev;
5000 ieee80211_rx_for_interface(&rx, skb, false);
5001
5002 prev = sdata;
5003 }
5004
5005 if (prev) {
5006 rx.sdata = prev;
5007
5008 if (ieee80211_rx_for_interface(&rx, skb, true))
5009 return;
5010 }
5011
5012 out:
5013 dev_kfree_skb(skb);
5014 }
5015
5016
5017
5018
5019
5020 void ieee80211_rx_list(struct ieee80211_hw *hw, struct ieee80211_sta *pubsta,
5021 struct sk_buff *skb, struct list_head *list)
5022 {
5023 struct ieee80211_local *local = hw_to_local(hw);
5024 struct ieee80211_rate *rate = NULL;
5025 struct ieee80211_supported_band *sband;
5026 struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(skb);
5027 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
5028
5029 WARN_ON_ONCE(softirq_count() == 0);
5030
5031 if (WARN_ON(status->band >= NUM_NL80211_BANDS))
5032 goto drop;
5033
5034 sband = local->hw.wiphy->bands[status->band];
5035 if (WARN_ON(!sband))
5036 goto drop;
5037
5038
5039
5040
5041
5042
5043
5044
5045 if (unlikely(local->quiescing || local->suspended))
5046 goto drop;
5047
5048
5049 if (unlikely(local->in_reconfig))
5050 goto drop;
5051
5052
5053
5054
5055
5056 if (WARN_ON(!local->started))
5057 goto drop;
5058
5059 if (likely(!(status->flag & RX_FLAG_FAILED_PLCP_CRC))) {
5060
5061
5062
5063
5064
5065 switch (status->encoding) {
5066 case RX_ENC_HT:
5067
5068
5069
5070
5071
5072
5073
5074
5075
5076
5077 if (WARN(status->rate_idx > 76,
5078 "Rate marked as an HT rate but passed "
5079 "status->rate_idx is not "
5080 "an MCS index [0-76]: %d (0x%02x)\n",
5081 status->rate_idx,
5082 status->rate_idx))
5083 goto drop;
5084 break;
5085 case RX_ENC_VHT:
5086 if (WARN_ONCE(status->rate_idx > 11 ||
5087 !status->nss ||
5088 status->nss > 8,
5089 "Rate marked as a VHT rate but data is invalid: MCS: %d, NSS: %d\n",
5090 status->rate_idx, status->nss))
5091 goto drop;
5092 break;
5093 case RX_ENC_HE:
5094 if (WARN_ONCE(status->rate_idx > 11 ||
5095 !status->nss ||
5096 status->nss > 8,
5097 "Rate marked as an HE rate but data is invalid: MCS: %d, NSS: %d\n",
5098 status->rate_idx, status->nss))
5099 goto drop;
5100 break;
5101 default:
5102 WARN_ON_ONCE(1);
5103 fallthrough;
5104 case RX_ENC_LEGACY:
5105 if (WARN_ON(status->rate_idx >= sband->n_bitrates))
5106 goto drop;
5107 rate = &sband->bitrates[status->rate_idx];
5108 }
5109 }
5110
5111 status->rx_flags = 0;
5112
5113 kcov_remote_start_common(skb_get_kcov_handle(skb));
5114
5115
5116
5117
5118
5119
5120
5121 if (!(status->flag & RX_FLAG_8023))
5122 skb = ieee80211_rx_monitor(local, skb, rate);
5123 if (skb) {
5124 if ((status->flag & RX_FLAG_8023) ||
5125 ieee80211_is_data_present(hdr->frame_control))
5126 ieee80211_tpt_led_trig_rx(local, skb->len);
5127
5128 if (status->flag & RX_FLAG_8023)
5129 __ieee80211_rx_handle_8023(hw, pubsta, skb, list);
5130 else
5131 __ieee80211_rx_handle_packet(hw, pubsta, skb, list);
5132 }
5133
5134 kcov_remote_stop();
5135 return;
5136 drop:
5137 kfree_skb(skb);
5138 }
5139 EXPORT_SYMBOL(ieee80211_rx_list);
5140
5141 void ieee80211_rx_napi(struct ieee80211_hw *hw, struct ieee80211_sta *pubsta,
5142 struct sk_buff *skb, struct napi_struct *napi)
5143 {
5144 struct sk_buff *tmp;
5145 LIST_HEAD(list);
5146
5147
5148
5149
5150
5151
5152
5153 rcu_read_lock();
5154 ieee80211_rx_list(hw, pubsta, skb, &list);
5155 rcu_read_unlock();
5156
5157 if (!napi) {
5158 netif_receive_skb_list(&list);
5159 return;
5160 }
5161
5162 list_for_each_entry_safe(skb, tmp, &list, list) {
5163 skb_list_del_init(skb);
5164 napi_gro_receive(napi, skb);
5165 }
5166 }
5167 EXPORT_SYMBOL(ieee80211_rx_napi);
5168
5169
5170
5171 void ieee80211_rx_irqsafe(struct ieee80211_hw *hw, struct sk_buff *skb)
5172 {
5173 struct ieee80211_local *local = hw_to_local(hw);
5174
5175 BUILD_BUG_ON(sizeof(struct ieee80211_rx_status) > sizeof(skb->cb));
5176
5177 skb->pkt_type = IEEE80211_RX_MSG;
5178 skb_queue_tail(&local->skb_queue, skb);
5179 tasklet_schedule(&local->tasklet);
5180 }
5181 EXPORT_SYMBOL(ieee80211_rx_irqsafe);