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