|
|
@@ -0,0 +1,38 @@
|
|
|
+From b478e06a16a8baa00c5ecc87c1d636981f2206d5 Mon Sep 17 00:00:00 2001
|
|
|
+From: Johannes Berg <[email protected]>
|
|
|
+Date: Tue, 29 Oct 2019 10:25:25 +0100
|
|
|
+Subject: [PATCH] mac80211: sta: randomize BA session dialog token allocator
|
|
|
+
|
|
|
+We currently always start the dialog token generator at zero,
|
|
|
+so the first dialog token we use is always 1. This would be
|
|
|
+OK if we had a perfect guarantee that we always do a proper
|
|
|
+deauth/re-auth handshake, but in IBSS mode this doesn't always
|
|
|
+happen properly.
|
|
|
+
|
|
|
+To make problems with block ack (aggregation) sessions getting
|
|
|
+stuck less likely, randomize the dialog token so if we start a
|
|
|
+new session but the peer still has old state for us, it can
|
|
|
+better detect this.
|
|
|
+
|
|
|
+This is really just a workaround to make things a bit more
|
|
|
+robust than they are now - a better fix would be to do a full
|
|
|
+authentication handshake in IBSS mode upon having discovered a
|
|
|
+new station, and on the receiver resetting the state (removing
|
|
|
+and re-adding the station) on receiving the authentication
|
|
|
+packet.
|
|
|
+
|
|
|
+Signed-off-by: Johannes Berg <[email protected]>
|
|
|
+---
|
|
|
+ net/mac80211/sta_info.c | 1 +
|
|
|
+ 1 file changed, 1 insertion(+)
|
|
|
+
|
|
|
+--- a/net/mac80211/sta_info.c
|
|
|
++++ b/net/mac80211/sta_info.c
|
|
|
+@@ -324,6 +324,7 @@ struct sta_info *sta_info_alloc(struct i
|
|
|
+ INIT_WORK(&sta->drv_deliver_wk, sta_deliver_ps_frames);
|
|
|
+ INIT_WORK(&sta->ampdu_mlme.work, ieee80211_ba_session_work);
|
|
|
+ mutex_init(&sta->ampdu_mlme.mtx);
|
|
|
++ sta->ampdu_mlme.dialog_token_allocator = prandom_u32_max(U8_MAX);
|
|
|
+ #ifdef CPTCFG_MAC80211_MESH
|
|
|
+ if (ieee80211_vif_is_mesh(&sdata->vif)) {
|
|
|
+ sta->mesh = kzalloc(sizeof(*sta->mesh), gfp);
|