mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
synced 2025-01-08 15:04:45 +00:00
mac80211: fix rate control for retransmitted frames
Since retransmission clears info->control, rate control needs to be called
again, otherwise the driver might crash due to invalid rates.
Cc: stable@vger.kernel.org # 5.14+
Reported-by: Aaro Koskinen <aaro.koskinen@iki.fi>
Reported-by: Robert W <rwbugreport@lost-in-the-void.net>
Fixes: 03c3911d2d
("mac80211: call ieee80211_tx_h_rate_ctrl() when dequeue")
Signed-off-by: Felix Fietkau <nbd@nbd.name>
Tested-by: Aaro Koskinen <aaro.koskinen@iki.fi>
Link: https://lore.kernel.org/r/20211122204323.9787-1-nbd@nbd.name
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
This commit is contained in:
parent
d5e568c3a4
commit
18688c80ad
@ -1822,15 +1822,15 @@ static int invoke_tx_handlers_late(struct ieee80211_tx_data *tx)
|
|||||||
struct ieee80211_tx_info *info = IEEE80211_SKB_CB(tx->skb);
|
struct ieee80211_tx_info *info = IEEE80211_SKB_CB(tx->skb);
|
||||||
ieee80211_tx_result res = TX_CONTINUE;
|
ieee80211_tx_result res = TX_CONTINUE;
|
||||||
|
|
||||||
|
if (!ieee80211_hw_check(&tx->local->hw, HAS_RATE_CONTROL))
|
||||||
|
CALL_TXH(ieee80211_tx_h_rate_ctrl);
|
||||||
|
|
||||||
if (unlikely(info->flags & IEEE80211_TX_INTFL_RETRANSMISSION)) {
|
if (unlikely(info->flags & IEEE80211_TX_INTFL_RETRANSMISSION)) {
|
||||||
__skb_queue_tail(&tx->skbs, tx->skb);
|
__skb_queue_tail(&tx->skbs, tx->skb);
|
||||||
tx->skb = NULL;
|
tx->skb = NULL;
|
||||||
goto txh_done;
|
goto txh_done;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!ieee80211_hw_check(&tx->local->hw, HAS_RATE_CONTROL))
|
|
||||||
CALL_TXH(ieee80211_tx_h_rate_ctrl);
|
|
||||||
|
|
||||||
CALL_TXH(ieee80211_tx_h_michael_mic_add);
|
CALL_TXH(ieee80211_tx_h_michael_mic_add);
|
||||||
CALL_TXH(ieee80211_tx_h_sequence);
|
CALL_TXH(ieee80211_tx_h_sequence);
|
||||||
CALL_TXH(ieee80211_tx_h_fragment);
|
CALL_TXH(ieee80211_tx_h_fragment);
|
||||||
|
Loading…
Reference in New Issue
Block a user