Set the total count of TX tries to 1 if IEEE80211_TX_CTL_NO_ACK is set. This fixes a bug where mac80211 allowed the RC algo to request drivers to forcibly retransmit NO_ACK (e.g. multicast) frames until the excessive-retries limit is reached. Signed-off-by: Gábor Stefanik <netrolller.3d@xxxxxxxxx> Cc: Johannes Berg <johannes@xxxxxxxxxxxxxxxx> --- Patch also available as attachment in case Gmail linewraps it. tx.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/net/mac80211/tx.c b/net/mac80211/tx.c index b47435d..751934b 100644 --- a/net/mac80211/tx.c +++ b/net/mac80211/tx.c @@ -539,7 +539,8 @@ ieee80211_tx_h_rate_ctrl(struct ieee80211_tx_data *tx) if (tx->sta) tx->sta->last_tx_rate = txrc.reported_rate; - if (unlikely(!info->control.rates[0].count)) + if (unlikely(!info->control.rates[0].count) || + info->flags & IEEE80211_TX_CTL_NO_ACK) info->control.rates[0].count = 1; if (is_multicast_ether_addr(hdr->addr1)) {
tx.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/net/mac80211/tx.c b/net/mac80211/tx.c index b47435d..751934b 100644 --- a/net/mac80211/tx.c +++ b/net/mac80211/tx.c @@ -539,7 +539,8 @@ ieee80211_tx_h_rate_ctrl(struct ieee80211_tx_data *tx) if (tx->sta) tx->sta->last_tx_rate = txrc.reported_rate; - if (unlikely(!info->control.rates[0].count)) + if (unlikely(!info->control.rates[0].count) || + info->flags & IEEE80211_TX_CTL_NO_ACK) info->control.rates[0].count = 1; if (is_multicast_ether_addr(hdr->addr1)) {