mac80211: Update to backports-4.19.207-1
authorRISCi_ATOM <bob@bobcall.me>
Thu, 30 Sep 2021 15:12:47 +0000 (11:12 -0400)
committerRISCi_ATOM <bob@bobcall.me>
Thu, 30 Sep 2021 15:12:47 +0000 (11:12 -0400)
Refresh all patches.

This contains fixes for CVE-2020-3702

1. These patches (ath, ath9k, mac80211)  were included in kernel
versions since 4.14.245 and 4.19.205. They fix security vulnerability
CVE-2020-3702 [1] similar to KrØØk, which was found by ESET [2].

Thank you Josef Schlehofer for reporting this problem.

[1] https://nvd.nist.gov/vuln/detail/CVE-2020-3702
[2] https://www.welivesecurity.com/2020/08/06/beyond-kr00k-even-more-wifi-chips-vulnerable-eavesdropping/

See upstream commit : 123d12eada9a8d63e790af372f30359415812228

23 files changed:
package/kernel/mac80211/Makefile
package/kernel/mac80211/patches/ath/356-Revert-ath9k-interpret-requested-txpower-in-EIRP-dom.patch
package/kernel/mac80211/patches/ath/365-ath9k-adjust-tx-power-reduction-for-US-regulatory-do.patch
package/kernel/mac80211/patches/ath/400-ath_move_debug_code.patch
package/kernel/mac80211/patches/ath/542-ath9k_debugfs_diag.patch
package/kernel/mac80211/patches/ath/544-ath9k-ar933x-usb-hang-workaround.patch
package/kernel/mac80211/patches/ath/551-ath9k_ubnt_uap_plus_hsr.patch
package/kernel/mac80211/patches/subsys/140-tweak-TSQ-setting.patch
package/kernel/mac80211/patches/subsys/300-mac80211-add-stop-start-logic-for-software-TXQs.patch
package/kernel/mac80211/patches/subsys/320-mac80211-Add-TXQ-scheduling-API.patch
package/kernel/mac80211/patches/subsys/321-cfg80211-Add-airtime-statistics-and-settings.patch
package/kernel/mac80211/patches/subsys/322-mac80211-Add-airtime-accounting-and-scheduling-to-TX.patch
package/kernel/mac80211/patches/subsys/323-mac80211-Expose-ieee80211_schedule_txq-function.patch
package/kernel/mac80211/patches/subsys/350-mac80211-add-hdrlen-to-ieee80211_tx_data.patch
package/kernel/mac80211/patches/subsys/351-mac80211-add-TX_NEEDS_ALIGNED4_SKBS-hw-flag.patch
package/kernel/mac80211/patches/subsys/352-mac80211-rework-locking-for-txq-scheduling-airtime-f.patch
package/kernel/mac80211/patches/subsys/354-mac80211-calculate-hash-for-fq-without-holding-fq-lo.patch
package/kernel/mac80211/patches/subsys/355-mac80211-run-late-dequeue-late-tx-handlers-without-h.patch
package/kernel/mac80211/patches/subsys/357-mac80211-optimize-skb-resizing.patch
package/kernel/mac80211/patches/subsys/358-mac80211-make-ieee80211_schedule_txq-schedule-empty-.patch
package/kernel/mac80211/patches/subsys/360-mac80211-when-using-iTXQ-select-the-queue-in-ieee802.patch
package/kernel/mac80211/patches/subsys/365-mac80211-IBSS-send-deauth-when-expiring-inactive-STA.patch
package/kernel/mac80211/patches/subsys/368-cfg80211-add-local-BSS-receive-time-to-survey-inform.patch

index eb4bacaa17d0b279db9f71cc152444c631aadb0e..3662ab8ab7e21cc0c9b6e35899532388d709b9cc 100644 (file)
@@ -10,10 +10,10 @@ include $(INCLUDE_DIR)/kernel.mk
 
 PKG_NAME:=mac80211
 
-PKG_VERSION:=4.19.193-1
+PKG_VERSION:=4.19.207-1
 PKG_RELEASE:=1
-PKG_SOURCE_URL:=@KERNEL/linux/kernel/projects/backports/stable/v4.19.193/
-PKG_HASH:=560c0ce9e4079fd26d046e188453e008a5e766e5409d950c4749a23da53d6d0a
+PKG_SOURCE_URL:=@KERNEL/linux/kernel/projects/backports/stable/v4.19.207/
+PKG_HASH:=e119fd57c868e22c0481171ff561902f8c1565f896d97a2163c0d138808cc5f7
 
 PKG_SOURCE:=backports-$(PKG_VERSION).tar.xz
 PKG_BUILD_DIR:=$(KERNEL_BUILD_DIR)/backports-$(PKG_VERSION)
index 1a91265f1bd0dc95936feaa34f38487423cfbde5..4e664fca2097ad5b772ca8d7a6688f5183162ddc 100644 (file)
@@ -8,7 +8,7 @@ This reverts commit 71f5137bf010c6faffab50c0ec15374c59c4a411.
 
 --- a/drivers/net/wireless/ath/ath9k/hw.c
 +++ b/drivers/net/wireless/ath/ath9k/hw.c
-@@ -2976,7 +2976,8 @@ void ath9k_hw_apply_txpower(struct ath_h
+@@ -2978,7 +2978,8 @@ void ath9k_hw_apply_txpower(struct ath_h
  {
        struct ath_regulatory *reg = ath9k_hw_regulatory(ah);
        struct ieee80211_channel *channel;
@@ -18,7 +18,7 @@ This reverts commit 71f5137bf010c6faffab50c0ec15374c59c4a411.
        u16 ctl = NO_CTL;
  
        if (!chan)
-@@ -2988,9 +2989,14 @@ void ath9k_hw_apply_txpower(struct ath_h
+@@ -2990,9 +2991,14 @@ void ath9k_hw_apply_txpower(struct ath_h
        channel = chan->chan;
        chan_pwr = min_t(int, channel->max_power * 2, MAX_RATE_POWER);
        new_pwr = min_t(int, chan_pwr, reg->power_limit);
index 288d4e478c790fb8923e6deecb2fb65f12f2e0f9..6d3ef5f04202d42b3afee70099a829633653399a 100644 (file)
@@ -11,7 +11,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
 
 --- a/drivers/net/wireless/ath/ath9k/hw.c
 +++ b/drivers/net/wireless/ath/ath9k/hw.c
-@@ -2995,6 +2995,10 @@ void ath9k_hw_apply_txpower(struct ath_h
+@@ -2997,6 +2997,10 @@ void ath9k_hw_apply_txpower(struct ath_h
        if (ant_gain > max_gain)
                ant_reduction = ant_gain - max_gain;
  
index e7df0e14be5d49d98a1512a981d515e717a82891..0d4ebfe0aa43a635c08b462afb584928f26a422d 100644 (file)
@@ -14,7 +14,7 @@
  CFLAGS_trace.o := -I$(src)
 --- a/drivers/net/wireless/ath/ath.h
 +++ b/drivers/net/wireless/ath/ath.h
-@@ -316,14 +316,7 @@ void _ath_dbg(struct ath_common *common,
+@@ -317,14 +317,7 @@ void _ath_dbg(struct ath_common *common,
  #endif /* CPTCFG_ATH_DEBUG */
  
  /** Returns string describing opmode, or NULL if unknown mode. */
index d7e82c9a667b81908bc4f31c8367cb4273818183..19bbee09a93a785fa976eb293f4bf357743f7dd2 100644 (file)
@@ -84,7 +84,7 @@
        bool reset_power_on;
        bool htc_reset_init;
  
-@@ -1073,6 +1081,7 @@ void ath9k_hw_check_nav(struct ath_hw *a
+@@ -1074,6 +1082,7 @@ void ath9k_hw_check_nav(struct ath_hw *a
  bool ath9k_hw_check_alive(struct ath_hw *ah);
  
  bool ath9k_hw_setpower(struct ath_hw *ah, enum ath9k_power_mode mode);
@@ -94,7 +94,7 @@
  struct ath_gen_timer *ath_gen_timer_alloc(struct ath_hw *ah,
 --- a/drivers/net/wireless/ath/ath9k/hw.c
 +++ b/drivers/net/wireless/ath/ath9k/hw.c
-@@ -1883,6 +1883,20 @@ u32 ath9k_hw_get_tsf_offset(struct times
+@@ -1882,6 +1882,20 @@ u32 ath9k_hw_get_tsf_offset(struct times
  }
  EXPORT_SYMBOL(ath9k_hw_get_tsf_offset);
  
  int ath9k_hw_reset(struct ath_hw *ah, struct ath9k_channel *chan,
                   struct ath9k_hw_cal_data *caldata, bool fastcc)
  {
-@@ -2091,6 +2105,7 @@ int ath9k_hw_reset(struct ath_hw *ah, st
+@@ -2090,6 +2104,7 @@ int ath9k_hw_reset(struct ath_hw *ah, st
                ar9003_hw_disable_phy_restart(ah);
  
        ath9k_hw_apply_gpio_override(ah);
                REG_SET_BIT(ah, AR_BTCOEX_WL_LNADIV, AR_BTCOEX_WL_LNADIV_FORCE_ON);
 --- a/drivers/net/wireless/ath/ath9k/main.c
 +++ b/drivers/net/wireless/ath/ath9k/main.c
-@@ -528,6 +528,11 @@ irqreturn_t ath_isr(int irq, void *dev)
+@@ -533,6 +533,11 @@ irqreturn_t ath_isr(int irq, void *dev)
        if (test_bit(ATH_OP_HW_RESET, &common->op_flags))
                return IRQ_HANDLED;
  
index 93eee34b648121c23ab6cee5e6317cb2d955a23a..2d2b83707288b3e13b7343a5dabab9690e90a4df 100644 (file)
@@ -40,7 +40,7 @@
        return true;
  }
  
-@@ -1861,8 +1880,14 @@ static int ath9k_hw_do_fastcc(struct ath
+@@ -1860,8 +1879,14 @@ static int ath9k_hw_do_fastcc(struct ath
        if (AR_SREV_9271(ah))
                ar9002_hw_load_ani_reg(ah, chan);
  
@@ -55,7 +55,7 @@
        return -EINVAL;
  }
  
-@@ -2116,6 +2141,9 @@ int ath9k_hw_reset(struct ath_hw *ah, st
+@@ -2115,6 +2140,9 @@ int ath9k_hw_reset(struct ath_hw *ah, st
                ath9k_hw_set_radar_params(ah);
        }
  
index 30eba271370607858c7f6aeb2e5d7e29e044ed46..08b92d4a86cfb8665f5d732d1e392edf70c48fcd 100644 (file)
  
  u8 ath9k_parse_mpdudensity(u8 mpdudensity)
  {
-@@ -649,6 +651,7 @@ void ath_reset_work(struct work_struct *
+@@ -654,6 +656,7 @@ void ath_reset_work(struct work_struct *
  static int ath9k_start(struct ieee80211_hw *hw)
  {
        struct ath_softc *sc = hw->priv;
        struct ath_hw *ah = sc->sc_ah;
        struct ath_common *common = ath9k_hw_common(ah);
        struct ieee80211_channel *curchan = sc->cur_chan->chandef.chan;
-@@ -727,6 +730,11 @@ static int ath9k_start(struct ieee80211_
+@@ -732,6 +735,11 @@ static int ath9k_start(struct ieee80211_
                                          AR_GPIO_OUTPUT_MUX_AS_OUTPUT);
        }
  
index 26c55560e34025a1eefe3e9524a4eb754c1ba95b..5b822126e4e431f47460d6259e907145b3187a64 100644 (file)
@@ -1,6 +1,6 @@
 --- a/net/mac80211/tx.c
 +++ b/net/mac80211/tx.c
-@@ -3833,6 +3833,12 @@ out:
+@@ -3841,6 +3841,12 @@ out:
  netdev_tx_t ieee80211_subif_start_xmit(struct sk_buff *skb,
                                       struct net_device *dev)
  {
index d925fcd51402c5407a6855e12794071e8684ca6b..29b3184fbadef7c04bdf696683650c108614867e 100644 (file)
@@ -100,7 +100,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
                     (unsigned long) local);
 --- a/net/mac80211/tx.c
 +++ b/net/mac80211/tx.c
-@@ -3498,13 +3498,19 @@ struct sk_buff *ieee80211_tx_dequeue(str
+@@ -3506,13 +3506,19 @@ struct sk_buff *ieee80211_tx_dequeue(str
        struct ieee80211_tx_info *info;
        struct ieee80211_tx_data tx;
        ieee80211_tx_result r;
@@ -122,7 +122,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
        /* Make sure fragments stay together. */
        skb = __skb_dequeue(&txqi->frags);
        if (skb)
-@@ -3617,6 +3623,7 @@ begin:
+@@ -3625,6 +3631,7 @@ begin:
        }
  
        IEEE80211_SKB_CB(skb)->control.vif = vif;
index 7e646f27665bbb7640f4a334171e4df4c4b459fd..796222c5273c8a257615edc70de7b8d32425016f 100644 (file)
@@ -202,7 +202,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
  
 --- a/net/mac80211/tx.c
 +++ b/net/mac80211/tx.c
-@@ -1441,6 +1441,7 @@ void ieee80211_txq_init(struct ieee80211
+@@ -1447,6 +1447,7 @@ void ieee80211_txq_init(struct ieee80211
        codel_vars_init(&txqi->def_cvars);
        codel_stats_init(&txqi->cstats);
        __skb_queue_head_init(&txqi->frags);
@@ -210,7 +210,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
  
        txqi->txq.vif = &sdata->vif;
  
-@@ -1464,6 +1465,9 @@ void ieee80211_txq_purge(struct ieee8021
+@@ -1470,6 +1471,9 @@ void ieee80211_txq_purge(struct ieee8021
  
        fq_tin_reset(fq, tin, fq_skb_free_func);
        ieee80211_purge_tx_queue(&local->hw, &txqi->frags);
@@ -220,7 +220,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
  }
  
  void ieee80211_txq_set_params(struct ieee80211_local *local)
-@@ -1580,7 +1584,7 @@ static bool ieee80211_queue_skb(struct i
+@@ -1586,7 +1590,7 @@ static bool ieee80211_queue_skb(struct i
        ieee80211_txq_enqueue(local, txqi, skb);
        spin_unlock_bh(&fq->lock);
  
@@ -229,7 +229,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
  
        return true;
  }
-@@ -3631,6 +3635,60 @@ out:
+@@ -3639,6 +3643,60 @@ out:
  }
  EXPORT_SYMBOL(ieee80211_tx_dequeue);
  
index e1a3fe38e1291ba24897b842e6497a3bb6b65ec1..1e03ee280cefaa0dcc3f7b9c8b1b120e0b5fbc90 100644 (file)
@@ -156,7 +156,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
  };
  
  /* policy for the key attributes */
-@@ -4715,6 +4716,11 @@ static int nl80211_send_station(struct s
+@@ -4716,6 +4717,11 @@ static int nl80211_send_station(struct s
        PUT_SINFO(PLID, plid, u16);
        PUT_SINFO(PLINK_STATE, plink_state, u8);
        PUT_SINFO_U64(RX_DURATION, rx_duration);
@@ -168,7 +168,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
  
        switch (rdev->wiphy.signal_type) {
        case CFG80211_SIGNAL_TYPE_MBM:
-@@ -5351,6 +5357,15 @@ static int nl80211_set_station(struct sk
+@@ -5352,6 +5358,15 @@ static int nl80211_set_station(struct sk
                        nla_get_u8(info->attrs[NL80211_ATTR_OPMODE_NOTIF]);
        }
  
@@ -184,7 +184,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
        /* Include parameters for TDLS peer (will check later) */
        err = nl80211_set_station_tdls(info, &params);
        if (err)
-@@ -5489,6 +5504,15 @@ static int nl80211_new_station(struct sk
+@@ -5490,6 +5505,15 @@ static int nl80211_new_station(struct sk
                        return -EINVAL;
        }
  
index aac28977f111fc4764f40cbea6231379a226a2dd..3821152805df485a950037d31709d9d3e94881a6 100644 (file)
@@ -149,7 +149,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
        /* if the dir failed, don't put all the other things into the root! */
 --- a/net/mac80211/debugfs_sta.c
 +++ b/net/mac80211/debugfs_sta.c
-@@ -178,9 +178,9 @@ static ssize_t sta_aqm_read(struct file
+@@ -179,9 +179,9 @@ static ssize_t sta_aqm_read(struct file
                               txqi->tin.tx_bytes,
                               txqi->tin.tx_packets,
                               txqi->flags,
@@ -162,7 +162,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
        }
  
        rcu_read_unlock();
-@@ -192,6 +192,64 @@ static ssize_t sta_aqm_read(struct file
+@@ -193,6 +193,64 @@ static ssize_t sta_aqm_read(struct file
  }
  STA_OPS(aqm);
  
@@ -227,7 +227,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
  static ssize_t sta_agg_status_read(struct file *file, char __user *userbuf,
                                        size_t count, loff_t *ppos)
  {
-@@ -546,6 +604,10 @@ void ieee80211_sta_debugfs_add(struct st
+@@ -547,6 +605,10 @@ void ieee80211_sta_debugfs_add(struct st
        if (local->ops->wake_tx_queue)
                DEBUGFS_ADD(aqm);
  
@@ -302,7 +302,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
        }
  
        for (i = 0; i < IEEE80211_NUM_TIDS; i++)
-@@ -1842,6 +1842,27 @@ void ieee80211_sta_set_buffered(struct i
+@@ -1837,6 +1837,27 @@ void ieee80211_sta_set_buffered(struct i
  }
  EXPORT_SYMBOL(ieee80211_sta_set_buffered);
  
@@ -330,7 +330,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
  int sta_info_move_state(struct sta_info *sta,
                        enum ieee80211_sta_state new_state)
  {
-@@ -2212,6 +2233,23 @@ void sta_set_sinfo(struct sta_info *sta,
+@@ -2207,6 +2228,23 @@ void sta_set_sinfo(struct sta_info *sta,
                sinfo->filled |= BIT_ULL(NL80211_STA_INFO_TX_FAILED);
        }
  
@@ -356,7 +356,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
                for_each_possible_cpu(cpu) {
 --- a/net/mac80211/sta_info.h
 +++ b/net/mac80211/sta_info.h
-@@ -128,6 +128,16 @@ enum ieee80211_agg_stop_reason {
+@@ -129,6 +129,16 @@ enum ieee80211_agg_stop_reason {
        AGG_STOP_DESTROY_STA,
  };
  
@@ -373,7 +373,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
  struct sta_info;
  
  /**
-@@ -593,6 +603,9 @@ struct sta_info {
+@@ -594,6 +604,9 @@ struct sta_info {
        } tx_stats;
        u16 tid_seq[IEEE80211_QOS_CTL_TID_MASK + 1];
  
@@ -400,7 +400,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
                                if (sta->status_stats.lost_packets)
 --- a/net/mac80211/tx.c
 +++ b/net/mac80211/tx.c
-@@ -1463,8 +1463,11 @@ void ieee80211_txq_purge(struct ieee8021
+@@ -1469,8 +1469,11 @@ void ieee80211_txq_purge(struct ieee8021
        struct fq *fq = &local->fq;
        struct fq_tin *tin = &txqi->tin;
  
@@ -412,7 +412,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
        spin_lock_bh(&local->active_txq_lock[txqi->txq.ac]);
        list_del_init(&txqi->schedule_order);
        spin_unlock_bh(&local->active_txq_lock[txqi->txq.ac]);
-@@ -3642,11 +3645,28 @@ struct ieee80211_txq *ieee80211_next_txq
+@@ -3650,11 +3653,28 @@ struct ieee80211_txq *ieee80211_next_txq
  
        lockdep_assert_held(&local->active_txq_lock[ac]);
  
@@ -442,7 +442,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
                return NULL;
  
        list_del_init(&txqi->schedule_order);
-@@ -3664,12 +3684,74 @@ void ieee80211_return_txq(struct ieee802
+@@ -3672,12 +3692,74 @@ void ieee80211_return_txq(struct ieee802
        lockdep_assert_held(&local->active_txq_lock[txq->ac]);
  
        if (list_empty(&txqi->schedule_order) &&
index ca70f6a8fad9287227e8d550b513cd4f7ba87804..86988f7934628f3060ab877c28108706d10ee0cc 100644 (file)
@@ -51,7 +51,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
  
 --- a/net/mac80211/tx.c
 +++ b/net/mac80211/tx.c
-@@ -3704,6 +3704,19 @@ void ieee80211_return_txq(struct ieee802
+@@ -3712,6 +3712,19 @@ void ieee80211_return_txq(struct ieee802
  }
  EXPORT_SYMBOL(ieee80211_return_txq);
  
index 48d4db609fdad00a9059b3d2fe37bf01efd15037..65b284f87426c50eb9ddd83e6b62cc16766e6ae9 100644 (file)
@@ -21,7 +21,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
  
 --- a/net/mac80211/tx.c
 +++ b/net/mac80211/tx.c
-@@ -925,7 +925,7 @@ ieee80211_tx_h_fragment(struct ieee80211
+@@ -931,7 +931,7 @@ ieee80211_tx_h_fragment(struct ieee80211
        struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
        struct ieee80211_hdr *hdr = (void *)skb->data;
        int frag_threshold = tx->local->hw.wiphy->frag_threshold;
@@ -30,7 +30,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
        int fragnum;
  
        /* no matter what happens, tx->skb moves to tx->skbs */
-@@ -946,8 +946,6 @@ ieee80211_tx_h_fragment(struct ieee80211
+@@ -952,8 +952,6 @@ ieee80211_tx_h_fragment(struct ieee80211
        if (WARN_ON(info->flags & IEEE80211_TX_CTL_AMPDU))
                return TX_DROP;
  
@@ -39,7 +39,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
        /* internal error, why isn't DONTFRAG set? */
        if (WARN_ON(skb->len + FCS_LEN <= frag_threshold))
                return TX_DROP;
-@@ -1178,6 +1176,8 @@ ieee80211_tx_prepare(struct ieee80211_su
+@@ -1184,6 +1182,8 @@ ieee80211_tx_prepare(struct ieee80211_su
  
        hdr = (struct ieee80211_hdr *) skb->data;
  
@@ -48,7 +48,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
        if (likely(sta)) {
                if (!IS_ERR(sta))
                        tx->sta = sta;
-@@ -3536,6 +3536,7 @@ begin:
+@@ -3544,6 +3544,7 @@ begin:
        tx.local = local;
        tx.skb = skb;
        tx.sdata = vif_to_sdata(info->control.vif);
@@ -56,7 +56,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
  
        if (txq->sta) {
                tx.sta = container_of(txq->sta, struct sta_info, sta);
-@@ -3580,7 +3581,7 @@ begin:
+@@ -3588,7 +3589,7 @@ begin:
  
                if (tx.key &&
                    (tx.key->conf.flags & IEEE80211_KEY_FLAG_GENERATE_IV))
@@ -65,7 +65,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
  
                ieee80211_xmit_fast_finish(sta->sdata, sta, pn_offs,
                                           tx.key, skb);
-@@ -4039,6 +4040,7 @@ ieee80211_build_data_template(struct iee
+@@ -4047,6 +4048,7 @@ ieee80211_build_data_template(struct iee
        hdr = (void *)skb->data;
        tx.sta = sta_info_get(sdata, hdr->addr1);
        tx.skb = skb;
index 68d34519f71e641645bc1ec4597aa36293f0ed6f..971ef9727f75546d418ff07a7d5ac17113da0453 100644 (file)
@@ -113,7 +113,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
        if (!(mshdr->flags & MESH_FLAGS_AE)) {
 --- a/net/mac80211/rx.c
 +++ b/net/mac80211/rx.c
-@@ -2705,7 +2705,7 @@ ieee80211_rx_h_mesh_fwding(struct ieee80
+@@ -2702,7 +2702,7 @@ ieee80211_rx_h_mesh_fwding(struct ieee80
        struct ieee80211_local *local = rx->local;
        struct ieee80211_sub_if_data *sdata = rx->sdata;
        struct ieee80211_if_mesh *ifmsh = &sdata->u.mesh;
@@ -122,7 +122,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
        int tailroom = 0;
  
        hdr = (struct ieee80211_hdr *) skb->data;
-@@ -2798,7 +2798,9 @@ ieee80211_rx_h_mesh_fwding(struct ieee80
+@@ -2795,7 +2795,9 @@ ieee80211_rx_h_mesh_fwding(struct ieee80
        if (sdata->crypto_tx_tailroom_needed_cnt)
                tailroom = IEEE80211_ENCRYPT_TAILROOM;
  
@@ -133,7 +133,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
                                       sdata->encrypt_headroom,
                                  tailroom, GFP_ATOMIC);
        if (!fwd_skb)
-@@ -2830,6 +2832,12 @@ ieee80211_rx_h_mesh_fwding(struct ieee80
+@@ -2827,6 +2829,12 @@ ieee80211_rx_h_mesh_fwding(struct ieee80
                return RX_DROP_MONITOR;
        }
  
@@ -148,7 +148,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
   out:
 --- a/net/mac80211/sta_info.h
 +++ b/net/mac80211/sta_info.h
-@@ -312,7 +312,7 @@ struct ieee80211_fast_tx {
+@@ -313,7 +313,7 @@ struct ieee80211_fast_tx {
        u8 hdr_len;
        u8 sa_offs, da_offs, pn_offs;
        u8 band;
@@ -217,7 +217,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
  
 --- a/net/mac80211/tx.c
 +++ b/net/mac80211/tx.c
-@@ -1175,8 +1175,7 @@ ieee80211_tx_prepare(struct ieee80211_su
+@@ -1181,8 +1181,7 @@ ieee80211_tx_prepare(struct ieee80211_su
        info->flags &= ~IEEE80211_TX_INTFL_NEED_TXPROCESSING;
  
        hdr = (struct ieee80211_hdr *) skb->data;
@@ -227,7 +227,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
  
        if (likely(sta)) {
                if (!IS_ERR(sta))
-@@ -2233,7 +2232,7 @@ netdev_tx_t ieee80211_monitor_start_xmit
+@@ -2239,7 +2238,7 @@ netdev_tx_t ieee80211_monitor_start_xmit
                goto fail;
  
        hdr = (struct ieee80211_hdr *)(skb->data + len_rthdr);
@@ -236,7 +236,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
  
        if (skb->len < len_rthdr + hdrlen)
                goto fail;
-@@ -2452,7 +2451,7 @@ static struct sk_buff *ieee80211_build_h
+@@ -2458,7 +2457,7 @@ static struct sk_buff *ieee80211_build_h
        struct ieee80211_chanctx_conf *chanctx_conf;
        struct ieee80211_sub_if_data *ap_sdata;
        enum nl80211_band band;
@@ -245,7 +245,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
  
        if (IS_ERR(sta))
                sta = NULL;
-@@ -2751,7 +2750,9 @@ static struct sk_buff *ieee80211_build_h
+@@ -2757,7 +2756,9 @@ static struct sk_buff *ieee80211_build_h
        }
  
        skb_pull(skb, skip_header_bytes);
@@ -255,7 +255,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
  
        /*
         * So we need to modify the skb header and hence need a copy of
-@@ -2784,6 +2785,9 @@ static struct sk_buff *ieee80211_build_h
+@@ -2790,6 +2791,9 @@ static struct sk_buff *ieee80211_build_h
                memcpy(skb_push(skb, meshhdrlen), &mesh_hdr, meshhdrlen);
  #endif
  
@@ -265,7 +265,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
        if (ieee80211_is_data_qos(fc)) {
                __le16 *qos_control;
  
-@@ -2960,6 +2964,8 @@ void ieee80211_check_fast_xmit(struct st
+@@ -2966,6 +2970,8 @@ void ieee80211_check_fast_xmit(struct st
                fc |= cpu_to_le16(IEEE80211_STYPE_QOS_DATA);
        }
  
@@ -274,7 +274,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
        /* We store the key here so there's no point in using rcu_dereference()
         * but that's fine because the code that changes the pointers will call
         * this function after doing so. For a single CPU that would be enough,
-@@ -3536,7 +3542,7 @@ begin:
+@@ -3544,7 +3550,7 @@ begin:
        tx.local = local;
        tx.skb = skb;
        tx.sdata = vif_to_sdata(info->control.vif);
@@ -283,7 +283,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
  
        if (txq->sta) {
                tx.sta = container_of(txq->sta, struct sta_info, sta);
-@@ -4040,7 +4046,7 @@ ieee80211_build_data_template(struct iee
+@@ -4048,7 +4054,7 @@ ieee80211_build_data_template(struct iee
        hdr = (void *)skb->data;
        tx.sta = sta_info_get(sdata, hdr->addr1);
        tx.skb = skb;
index 11fe01ec21fa13f88e8bb4932d80bd1356a6efd8..6784c065d07c5c1758bac81dfe846a6f35e3a650 100644 (file)
@@ -95,7 +95,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
   * ieee80211_txq_may_transmit - check whether TXQ is allowed to transmit
 --- a/net/mac80211/tx.c
 +++ b/net/mac80211/tx.c
-@@ -3648,16 +3648,17 @@ EXPORT_SYMBOL(ieee80211_tx_dequeue);
+@@ -3656,16 +3656,17 @@ EXPORT_SYMBOL(ieee80211_tx_dequeue);
  struct ieee80211_txq *ieee80211_next_txq(struct ieee80211_hw *hw, u8 ac)
  {
        struct ieee80211_local *local = hw_to_local(hw);
@@ -115,7 +115,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
  
        if (txqi->txq.sta) {
                struct sta_info *sta = container_of(txqi->txq.sta,
-@@ -3674,21 +3675,25 @@ struct ieee80211_txq *ieee80211_next_txq
+@@ -3682,21 +3683,25 @@ struct ieee80211_txq *ieee80211_next_txq
  
  
        if (txqi->schedule_round == local->schedule_round[ac])
@@ -146,7 +146,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
  
        if (list_empty(&txqi->schedule_order) &&
            (!skb_queue_empty(&txqi->frags) || txqi->tin.backlog_packets)) {
-@@ -3708,18 +3713,7 @@ void ieee80211_return_txq(struct ieee802
+@@ -3716,18 +3721,7 @@ void ieee80211_return_txq(struct ieee802
                        list_add_tail(&txqi->schedule_order,
                                      &local->active_txqs[txq->ac]);
        }
@@ -165,7 +165,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
        spin_unlock_bh(&local->active_txq_lock[txq->ac]);
  }
  EXPORT_SYMBOL(ieee80211_schedule_txq);
-@@ -3732,7 +3726,7 @@ bool ieee80211_txq_may_transmit(struct i
+@@ -3740,7 +3734,7 @@ bool ieee80211_txq_may_transmit(struct i
        struct sta_info *sta;
        u8 ac = txq->ac;
  
@@ -174,7 +174,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
  
        if (!txqi->txq.sta)
                goto out;
-@@ -3762,34 +3756,27 @@ bool ieee80211_txq_may_transmit(struct i
+@@ -3770,34 +3764,27 @@ bool ieee80211_txq_may_transmit(struct i
  
        sta->airtime[ac].deficit += sta->airtime_weight;
        list_move_tail(&txqi->schedule_order, &local->active_txqs[ac]);
index 460736139564472abed53451c139938a882ee08d..d1cc04262d9027c44df3628c413a955c930c4c0c 100644 (file)
@@ -76,7 +76,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
        flow->backlog += skb->len;
 --- a/net/mac80211/tx.c
 +++ b/net/mac80211/tx.c
-@@ -1390,11 +1390,15 @@ static void ieee80211_txq_enqueue(struct
+@@ -1396,11 +1396,15 @@ static void ieee80211_txq_enqueue(struct
  {
        struct fq *fq = &local->fq;
        struct fq_tin *tin = &txqi->tin;
@@ -93,7 +93,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
  }
  
  static bool fq_vlan_filter_func(struct fq *fq, struct fq_tin *tin,
-@@ -1564,7 +1568,6 @@ static bool ieee80211_queue_skb(struct i
+@@ -1570,7 +1574,6 @@ static bool ieee80211_queue_skb(struct i
                                struct sta_info *sta,
                                struct sk_buff *skb)
  {
@@ -101,7 +101,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
        struct ieee80211_vif *vif;
        struct txq_info *txqi;
  
-@@ -1582,9 +1585,7 @@ static bool ieee80211_queue_skb(struct i
+@@ -1588,9 +1591,7 @@ static bool ieee80211_queue_skb(struct i
        if (!txqi)
                return false;
  
@@ -111,7 +111,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
  
        schedule_and_wake_txq(local, txqi);
  
-@@ -3211,6 +3212,7 @@ static bool ieee80211_amsdu_aggregate(st
+@@ -3219,6 +3220,7 @@ static bool ieee80211_amsdu_aggregate(st
        u8 max_subframes = sta->sta.max_amsdu_subframes;
        int max_frags = local->hw.max_tx_fragments;
        int max_amsdu_len = sta->sta.max_amsdu_len;
@@ -119,7 +119,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
        int orig_truesize;
        __be16 len;
        void *data;
-@@ -3233,6 +3235,8 @@ static bool ieee80211_amsdu_aggregate(st
+@@ -3241,6 +3243,8 @@ static bool ieee80211_amsdu_aggregate(st
                max_amsdu_len = min_t(int, max_amsdu_len,
                                      sta->sta.max_rc_amsdu_len);
  
@@ -128,7 +128,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
        spin_lock_bh(&fq->lock);
  
        /* TODO: Ideally aggregation should be done on dequeue to remain
-@@ -3240,7 +3244,8 @@ static bool ieee80211_amsdu_aggregate(st
+@@ -3248,7 +3252,8 @@ static bool ieee80211_amsdu_aggregate(st
         */
  
        tin = &txqi->tin;
index 3109826ed855071de5aee8c4f41cb21c1d3fe793..ceeb6e41c22f811176dc9a4292b0d562bd5d336c 100644 (file)
@@ -10,7 +10,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
 
 --- a/net/mac80211/tx.c
 +++ b/net/mac80211/tx.c
-@@ -3518,6 +3518,7 @@ struct sk_buff *ieee80211_tx_dequeue(str
+@@ -3526,6 +3526,7 @@ struct sk_buff *ieee80211_tx_dequeue(str
        ieee80211_tx_result r;
        struct ieee80211_vif *vif = txq->vif;
  
@@ -18,7 +18,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
        spin_lock_bh(&fq->lock);
  
        if (test_bit(IEEE80211_TXQ_STOP, &txqi->flags) ||
-@@ -3534,11 +3535,12 @@ struct sk_buff *ieee80211_tx_dequeue(str
+@@ -3542,11 +3543,12 @@ struct sk_buff *ieee80211_tx_dequeue(str
        if (skb)
                goto out;
  
@@ -32,7 +32,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
        hdr = (struct ieee80211_hdr *)skb->data;
        info = IEEE80211_SKB_CB(skb);
  
-@@ -3602,8 +3604,11 @@ begin:
+@@ -3610,8 +3612,11 @@ begin:
  
                skb = __skb_dequeue(&tx.skbs);
  
@@ -45,7 +45,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
        }
  
        if (skb && skb_has_frag_list(skb) &&
-@@ -3642,6 +3647,7 @@ begin:
+@@ -3650,6 +3655,7 @@ begin:
        }
  
        IEEE80211_SKB_CB(skb)->control.vif = vif;
index e7e8a0b286852a353a560e64ab08e8b694438fb6..e44508a183cf7df203846a8a30ffe9c0937c5f7c 100644 (file)
@@ -24,7 +24,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
 
 --- a/net/mac80211/ieee80211_i.h
 +++ b/net/mac80211/ieee80211_i.h
-@@ -1762,6 +1762,9 @@ void ieee80211_clear_fast_xmit(struct st
+@@ -1750,6 +1750,9 @@ void ieee80211_clear_fast_xmit(struct st
  int ieee80211_tx_control_port(struct wiphy *wiphy, struct net_device *dev,
                              const u8 *buf, size_t len,
                              const u8 *dest, __be16 proto, bool unencrypted);
@@ -50,7 +50,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
        if (WARN_ON_ONCE(skb_headroom(skb) < rtap_len)) {
 --- a/net/mac80211/tx.c
 +++ b/net/mac80211/tx.c
-@@ -1914,42 +1914,53 @@ static bool ieee80211_tx(struct ieee8021
+@@ -1920,42 +1920,53 @@ static bool ieee80211_tx(struct ieee8021
  }
  
  /* device xmit handlers */
@@ -129,7 +129,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
                wiphy_debug(local->hw.wiphy,
                            "failed to reallocate TX buffer\n");
                return -ENOMEM;
-@@ -1964,24 +1975,9 @@ void ieee80211_xmit(struct ieee80211_sub
+@@ -1970,24 +1981,9 @@ void ieee80211_xmit(struct ieee80211_sub
  {
        struct ieee80211_local *local = sdata->local;
        struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
@@ -156,7 +156,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
                ieee80211_free_txskb(&local->hw, skb);
                return;
        }
-@@ -2752,30 +2748,14 @@ static struct sk_buff *ieee80211_build_h
+@@ -2758,30 +2754,14 @@ static struct sk_buff *ieee80211_build_h
  
        skb_pull(skb, skip_header_bytes);
        padsize = ieee80211_hdr_padsize(&local->hw, hdrlen);
@@ -193,7 +193,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
        }
  
        if (encaps_data)
-@@ -3388,7 +3368,6 @@ static bool ieee80211_xmit_fast(struct i
+@@ -3396,7 +3376,6 @@ static bool ieee80211_xmit_fast(struct i
        struct ieee80211_local *local = sdata->local;
        u16 ethertype = (skb->data[12] << 8) | skb->data[13];
        int extra_head = fast_tx->hdr_len - (ETH_HLEN - 2);
@@ -201,7 +201,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
        struct ethhdr eth;
        struct ieee80211_tx_info *info;
        struct ieee80211_hdr *hdr = (void *)fast_tx->hdr;
-@@ -3440,10 +3419,7 @@ static bool ieee80211_xmit_fast(struct i
+@@ -3448,10 +3427,7 @@ static bool ieee80211_xmit_fast(struct i
         * as the may-encrypt argument for the resize to not account for
         * more room than we already have in 'extra_head'
         */
index c1e0c5c24cf9728b5c129b7bd60f9a585408a6c4..5c1e0b501ea7ce1664bade8b827c2aeb29c6a5f0 100644 (file)
@@ -72,7 +72,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
  /**
 --- a/net/mac80211/tx.c
 +++ b/net/mac80211/tx.c
-@@ -3674,8 +3674,9 @@ out:
+@@ -3682,8 +3682,9 @@ out:
  }
  EXPORT_SYMBOL(ieee80211_next_txq);
  
@@ -84,7 +84,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
  {
        struct ieee80211_local *local = hw_to_local(hw);
        struct txq_info *txqi = to_txq_info(txq);
-@@ -3683,7 +3684,8 @@ void ieee80211_schedule_txq(struct ieee8
+@@ -3691,7 +3692,8 @@ void ieee80211_schedule_txq(struct ieee8
        spin_lock_bh(&local->active_txq_lock[txq->ac]);
  
        if (list_empty(&txqi->schedule_order) &&
@@ -94,7 +94,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
                /* If airtime accounting is active, always enqueue STAs at the
                 * head of the list to ensure that they only get moved to the
                 * back by the airtime DRR scheduler once they have a negative
-@@ -3703,7 +3705,7 @@ void ieee80211_schedule_txq(struct ieee8
+@@ -3711,7 +3713,7 @@ void ieee80211_schedule_txq(struct ieee8
  
        spin_unlock_bh(&local->active_txq_lock[txq->ac]);
  }
index ea86758ea0cbc6e45066acf43997bf80e998b26c..385b0e7a1b9b72865f92f6699ec4027ab78d04ae 100644 (file)
@@ -13,7 +13,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
 
 --- a/net/mac80211/tx.c
 +++ b/net/mac80211/tx.c
-@@ -3773,6 +3773,7 @@ void __ieee80211_subif_start_xmit(struct
+@@ -3781,6 +3781,7 @@ void __ieee80211_subif_start_xmit(struct
                                  u32 ctrl_flags)
  {
        struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
@@ -21,7 +21,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
        struct sta_info *sta;
        struct sk_buff *next;
  
-@@ -3786,7 +3787,15 @@ void __ieee80211_subif_start_xmit(struct
+@@ -3794,7 +3795,15 @@ void __ieee80211_subif_start_xmit(struct
        if (ieee80211_lookup_ra_sta(sdata, skb, &sta))
                goto out_free;
  
index d30642ee6c8613f236b0c98248fb889f00432e19..12cae52b06c3766a7c01174f8d9e1c9a10cb7785 100644 (file)
@@ -54,7 +54,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
        }
 --- a/net/mac80211/ieee80211_i.h
 +++ b/net/mac80211/ieee80211_i.h
-@@ -2056,7 +2056,8 @@ void ieee80211_send_auth(struct ieee8021
+@@ -2059,7 +2059,8 @@ void ieee80211_send_auth(struct ieee8021
                         const u8 *da, const u8 *key, u8 key_len, u8 key_idx,
                         u32 tx_flags);
  void ieee80211_send_deauth_disassoc(struct ieee80211_sub_if_data *sdata,
index 651b117c8345416e188ece900c82bcbe84aa2d0d..aa49e893084e15b73c677613b6a776187f53ad9a 100644 (file)
@@ -64,7 +64,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
        __NL80211_SURVEY_INFO_AFTER_LAST,
 --- a/net/wireless/nl80211.c
 +++ b/net/wireless/nl80211.c
-@@ -8379,6 +8379,10 @@ static int nl80211_send_survey(struct sk
+@@ -8380,6 +8380,10 @@ static int nl80211_send_survey(struct sk
            nla_put_u64_64bit(msg, NL80211_SURVEY_INFO_TIME_SCAN,
                              survey->time_scan, NL80211_SURVEY_INFO_PAD))
                goto nla_put_failure;