mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-24 07:46:48 +00:00
64 lines
2.2 KiB
Diff
64 lines
2.2 KiB
Diff
|
From 26cd9bafc1d25e602952ee86cd2a5b8c3a995490 Mon Sep 17 00:00:00 2001
|
||
|
From: Stijn Tintel <stijn@linux-ipv6.be>
|
||
|
Date: Fri, 28 Jul 2023 16:27:47 +0300
|
||
|
Subject: [PATCH] Revert "Do prune_association only after the STA is
|
||
|
authorized"
|
||
|
|
||
|
Commit e978072baaca ("Do prune_association only after the STA is
|
||
|
authorized") causes issues when an STA roams from one interface to
|
||
|
another interface on the same PHY. The mt7915 driver is not able to
|
||
|
handle this properly. While the commits fixes a DoS, there are other
|
||
|
devices and drivers with the same limitation, so revert to the orginal
|
||
|
behavior for now, until we have a better solution in place.
|
||
|
|
||
|
Ref: https://github.com/openwrt/openwrt/issues/13156
|
||
|
Signed-off-by: Stijn Tintel <stijn@linux-ipv6.be>
|
||
|
---
|
||
|
src/ap/hostapd.c | 14 +++++++++++---
|
||
|
src/ap/sta_info.c | 3 ---
|
||
|
2 files changed, 11 insertions(+), 6 deletions(-)
|
||
|
|
||
|
--- a/src/ap/hostapd.c
|
||
|
+++ b/src/ap/hostapd.c
|
||
|
@@ -3563,6 +3563,8 @@ int hostapd_remove_iface(struct hapd_int
|
||
|
void hostapd_new_assoc_sta(struct hostapd_data *hapd, struct sta_info *sta,
|
||
|
int reassoc)
|
||
|
{
|
||
|
+ int mld_assoc_link_id = -1;
|
||
|
+
|
||
|
if (hapd->tkip_countermeasures) {
|
||
|
hostapd_drv_sta_deauth(hapd, sta->addr,
|
||
|
WLAN_REASON_MICHAEL_MIC_FAILURE);
|
||
|
@@ -3570,10 +3572,16 @@ void hostapd_new_assoc_sta(struct hostap
|
||
|
}
|
||
|
|
||
|
#ifdef CONFIG_IEEE80211BE
|
||
|
- if (hapd->conf->mld_ap && sta->mld_info.mld_sta &&
|
||
|
- sta->mld_assoc_link_id != hapd->mld_link_id)
|
||
|
- return;
|
||
|
+ if (hapd->conf->mld_ap && sta->mld_info.mld_sta) {
|
||
|
+ if (sta->mld_assoc_link_id == hapd->mld_link_id) {
|
||
|
+ mld_assoc_link_id = sta->mld_assoc_link_id;
|
||
|
+ } else {
|
||
|
+ return;
|
||
|
+ }
|
||
|
+ }
|
||
|
#endif /* CONFIG_IEEE80211BE */
|
||
|
+ if (mld_assoc_link_id != -2)
|
||
|
+ hostapd_prune_associations(hapd, sta->addr, mld_assoc_link_id);
|
||
|
|
||
|
ap_sta_clear_disconnect_timeouts(hapd, sta);
|
||
|
sta->post_csa_sa_query = 0;
|
||
|
--- a/src/ap/sta_info.c
|
||
|
+++ b/src/ap/sta_info.c
|
||
|
@@ -1318,9 +1318,6 @@ void ap_sta_set_authorized(struct hostap
|
||
|
mld_assoc_link_id = -2;
|
||
|
}
|
||
|
#endif /* CONFIG_IEEE80211BE */
|
||
|
- if (mld_assoc_link_id != -2)
|
||
|
- hostapd_prune_associations(hapd, sta->addr,
|
||
|
- mld_assoc_link_id);
|
||
|
sta->flags |= WLAN_STA_AUTHORIZED;
|
||
|
} else {
|
||
|
sta->flags &= ~WLAN_STA_AUTHORIZED;
|