summaryrefslogtreecommitdiff
path: root/package/mac80211/patches/300-pending_work.patch
diff options
context:
space:
mode:
authorFelix Fietkau <nbd@openwrt.org>2012-06-14 21:36:05 +0000
committerFelix Fietkau <nbd@openwrt.org>2012-06-14 21:36:05 +0000
commitfe94e174e523e335b88f7eaf7aa418ef9b3a3014 (patch)
tree69ee8590792d504e08c77efdb2a1668cfe6bb97c /package/mac80211/patches/300-pending_work.patch
parentcf788fc7317c3e4a5bab17194c680ed5b0df39a7 (diff)
downloadmtk-20170518-fe94e174e523e335b88f7eaf7aa418ef9b3a3014.zip
mtk-20170518-fe94e174e523e335b88f7eaf7aa418ef9b3a3014.tar.gz
mtk-20170518-fe94e174e523e335b88f7eaf7aa418ef9b3a3014.tar.bz2
ath9k: fix an invalid pointer access in the tx path
SVN-Revision: 32376
Diffstat (limited to 'package/mac80211/patches/300-pending_work.patch')
-rw-r--r--package/mac80211/patches/300-pending_work.patch50
1 files changed, 50 insertions, 0 deletions
diff --git a/package/mac80211/patches/300-pending_work.patch b/package/mac80211/patches/300-pending_work.patch
index 7319079..9044396 100644
--- a/package/mac80211/patches/300-pending_work.patch
+++ b/package/mac80211/patches/300-pending_work.patch
@@ -523,3 +523,53 @@
}
#endif
+--- a/drivers/net/wireless/ath/ath9k/ath9k.h
++++ b/drivers/net/wireless/ath/ath9k/ath9k.h
+@@ -214,6 +214,7 @@ struct ath_frame_info {
+ enum ath9k_key_type keytype;
+ u8 keyix;
+ u8 retries;
++ bool short_preamble;
+ };
+
+ struct ath_buf_state {
+--- a/drivers/net/wireless/ath/ath9k/xmit.c
++++ b/drivers/net/wireless/ath/ath9k/xmit.c
+@@ -938,6 +938,7 @@ static void ath_buf_set_rate(struct ath_
+ struct ieee80211_tx_rate *rates;
+ const struct ieee80211_rate *rate;
+ struct ieee80211_hdr *hdr;
++ struct ath_frame_info *fi = get_frame_info(bf->bf_mpdu);
+ int i;
+ u8 rix = 0;
+
+@@ -957,8 +958,7 @@ static void ath_buf_set_rate(struct ath_
+ rate = ieee80211_get_rts_cts_rate(sc->hw, tx_info);
+ info->rtscts_rate = rate->hw_value;
+
+- if (tx_info->control.vif &&
+- tx_info->control.vif->bss_conf.use_short_preamble)
++ if (fi->short_preamble)
+ info->rtscts_rate |= rate->hw_value_short;
+
+ for (i = 0; i < 4; i++) {
+@@ -1779,6 +1779,11 @@ static void setup_frame_info(struct ieee
+ struct ath_frame_info *fi = get_frame_info(skb);
+ struct ath_node *an = NULL;
+ enum ath9k_key_type keytype;
++ bool short_preamble = false;
++
++ if (tx_info->control.vif &&
++ tx_info->control.vif->bss_conf.use_short_preamble)
++ short_preamble = true;
+
+ keytype = ath9k_cmn_get_hw_crypto_keytype(skb);
+
+@@ -1794,6 +1799,7 @@ static void setup_frame_info(struct ieee
+ fi->keyix = ATH9K_TXKEYIX_INVALID;
+ fi->keytype = keytype;
+ fi->framelen = framelen;
++ fi->short_preamble = short_preamble;
+ }
+
+ u8 ath_txchainmask_reduction(struct ath_softc *sc, u8 chainmask, u32 rate)