mac80211: fix crash in drivers relying on mac80211 retransmitting packets for powersave clients
This showed up primarily on rt2x00 Signed-off-by: Felix Fietkau <nbd@nbd.name>
This commit is contained in:
		| @@ -0,0 +1,35 @@ | ||||
| From: Felix Fietkau <nbd@nbd.name> | ||||
| Date: Mon, 22 Nov 2021 21:39:38 +0100 | ||||
| Subject: [PATCH] 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: 03c3911d2d67 ("mac80211: call ieee80211_tx_h_rate_ctrl() when dequeue") | ||||
| Signed-off-by: Felix Fietkau <nbd@nbd.name> | ||||
| --- | ||||
|  | ||||
| --- a/net/mac80211/tx.c | ||||
| +++ b/net/mac80211/tx.c | ||||
| @@ -1825,15 +1825,15 @@ static int invoke_tx_handlers_late(struc | ||||
|  	struct ieee80211_tx_info *info = IEEE80211_SKB_CB(tx->skb); | ||||
|  	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)) { | ||||
|  		__skb_queue_tail(&tx->skbs, tx->skb); | ||||
|  		tx->skb = NULL; | ||||
|  		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_sequence); | ||||
|  	CALL_TXH(ieee80211_tx_h_fragment); | ||||
		Reference in New Issue
	
	Block a user
	 Felix Fietkau
					Felix Fietkau