summaryrefslogtreecommitdiffstats
path: root/net/mac80211
diff options
context:
space:
mode:
authorRameshkumar Sundaram <quic_ramess@quicinc.com>2024-02-27 09:52:50 +0530
committerJohannes Berg <johannes.berg@intel.com>2024-03-04 14:28:59 +0100
commit1c0d21c4b33a41be9090e73f8225813d72ac88d9 (patch)
treef6655423e76bbeafb26f2459eab63b74bc5dfff5 /net/mac80211
parent9ad7974856926129f190ffbe3beea78460b3b7cc (diff)
downloadlinux-1c0d21c4b33a41be9090e73f8225813d72ac88d9.tar.gz
linux-1c0d21c4b33a41be9090e73f8225813d72ac88d9.tar.bz2
linux-1c0d21c4b33a41be9090e73f8225813d72ac88d9.zip
wifi: mac80211: remove only link keys during stopping link AP
Currently while stopping a link AP, all keys from the interface were removed. However with MLO there is a requirement to free only the link keys. Add changes to remove keys which are associated with the link AP which is going to be stopped. Signed-off-by: Rameshkumar Sundaram <quic_ramess@quicinc.com> Signed-off-by: Aditya Kumar Singh <quic_adisi@quicinc.com> Link: https://msgid.link/20240227042251.1511122-2-quic_adisi@quicinc.com Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Diffstat (limited to 'net/mac80211')
-rw-r--r--net/mac80211/cfg.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/net/mac80211/cfg.c b/net/mac80211/cfg.c
index 3aa96898a250..bc0c1300e404 100644
--- a/net/mac80211/cfg.c
+++ b/net/mac80211/cfg.c
@@ -1563,6 +1563,7 @@ static int ieee80211_stop_ap(struct wiphy *wiphy, struct net_device *dev,
struct ieee80211_link_data *link =
sdata_dereference(sdata->link[link_id], sdata);
struct ieee80211_bss_conf *link_conf = link->conf;
+ LIST_HEAD(keys);
lockdep_assert_wiphy(local->hw.wiphy);
@@ -1617,7 +1618,12 @@ static int ieee80211_stop_ap(struct wiphy *wiphy, struct net_device *dev,
link_conf->bssid_indicator = 0;
__sta_info_flush(sdata, true, link_id);
- ieee80211_free_keys(sdata, true);
+
+ ieee80211_remove_link_keys(link, &keys);
+ if (!list_empty(&keys)) {
+ synchronize_net();
+ ieee80211_free_key_list(local, &keys);
+ }
link_conf->enable_beacon = false;
sdata->beacon_rate_set = false;