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