[PATCH wireless] wifi: mac80211: Fix ADDBA update when HW supports reordering

From: Remi Pommarel

Date: Tue Feb 17 2026 - 06:10:16 EST


Commit f89e07d4cf26 ("mac80211: agg-rx: refuse ADDBA Request with timeout
update") added a check to fail when ADDBA update would change the
timeout param.

This param is kept in tid_ampdu_rx context which is only allocated on HW
that do not set SUPPORTS_REORDERING_BUFFER. Because the timeout check
was done regardless of this param, ADDBA update always failed on those
HW.

Fix this by only checking tid_ampdu_rx->timeout only when
SUPPORTS_REORDERING_BUFFER is not set.

Fixes: f89e07d4cf26 ("mac80211: agg-rx: refuse ADDBA Request with timeout update")
Signed-off-by: Remi Pommarel <repk@xxxxxxxxxxxx>
---
net/mac80211/agg-rx.c | 19 ++++++++++---------
1 file changed, 10 insertions(+), 9 deletions(-)

diff --git a/net/mac80211/agg-rx.c b/net/mac80211/agg-rx.c
index 7da909d78c68..099a291723e6 100644
--- a/net/mac80211/agg-rx.c
+++ b/net/mac80211/agg-rx.c
@@ -353,7 +353,16 @@ void __ieee80211_start_rx_ba_session(struct sta_info *sta,
buf_size, sta->sta.addr);

if (test_bit(tid, sta->ampdu_mlme.agg_session_valid)) {
- if (sta->ampdu_mlme.tid_rx_token[tid] == dialog_token) {
+ if (sta->ampdu_mlme.tid_rx_token[tid] != dialog_token) {
+ ht_dbg_ratelimited(sta->sdata,
+ "unexpected AddBA Req from %pM on tid %u\n",
+ sta->sta.addr, tid);
+
+ /* delete existing Rx BA session on the same tid */
+ __ieee80211_stop_rx_ba_session(sta, tid, WLAN_BACK_RECIPIENT,
+ WLAN_STATUS_UNSPECIFIED_QOS,
+ false);
+ } else if (!ieee80211_hw_check(&local->hw, SUPPORTS_REORDERING_BUFFER)) {
struct tid_ampdu_rx *tid_rx;

ht_dbg_ratelimited(sta->sdata,
@@ -374,14 +383,6 @@ void __ieee80211_start_rx_ba_session(struct sta_info *sta,
goto end;
}

- ht_dbg_ratelimited(sta->sdata,
- "unexpected AddBA Req from %pM on tid %u\n",
- sta->sta.addr, tid);
-
- /* delete existing Rx BA session on the same tid */
- __ieee80211_stop_rx_ba_session(sta, tid, WLAN_BACK_RECIPIENT,
- WLAN_STATUS_UNSPECIFIED_QOS,
- false);
}

if (ieee80211_hw_check(&local->hw, SUPPORTS_REORDERING_BUFFER)) {
--
2.52.0