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