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