summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohannes Berg <johannes.berg@intel.com>2026-10-13 15:12:58 +0200
committerJohannes Berg <johannes.berg@intel.com>2026-10-14 12:19:36 +0200
commit577f690ce5dc641d9d8646d15bb8e99ff4a8280e (patch)
tree751a6bd2fed95c49a204328a4625150c7c2fddfe
parenta919316bbb700d44baf9cdbf78666bce24261bc8 (diff)
downloadlinux-next-577f690ce5dc641d9d8646d15bb8e99ff4a8280e.tar.gz
linux-next-577f690ce5dc641d9d8646d15bb8e99ff4a8280e.zip
wifi: cfg80211: track SSID regardless of country data
If the country data cannot be found, the function exits and then doesn't track the SSID. Move the SSID tracking up to fix that. Fixes: c38c70185101 ("wifi: cfg80211: Set SSID if it is not already set") Link: https://patch.msgid.link/20261013151258.7fbca481c328.I7beb03fb4309698bdcfade57c6804573f96eeb18@changeid Signed-off-by: Johannes Berg <johannes.berg@intel.com>
-rw-r--r--net/wireless/sme.c38
1 files changed, 19 insertions, 19 deletions
diff --git a/net/wireless/sme.c b/net/wireless/sme.c
index fde86c900f4f..710472c197c9 100644
--- a/net/wireless/sme.c
+++ b/net/wireless/sme.c
@@ -872,6 +872,25 @@ void __cfg80211_connect_result(struct net_device *dev,
cfg80211_upload_connect_keys(wdev);
+ if (!wdev->u.client.ssid_len) {
+ rcu_read_lock();
+ for_each_valid_link(cr, link) {
+ u32 ssid_len;
+
+ ssid = ieee80211_bss_get_elem(cr->links[link].bss,
+ WLAN_EID_SSID);
+
+ if (!ssid || !ssid->datalen)
+ continue;
+
+ ssid_len = min(ssid->datalen, IEEE80211_MAX_SSID_LEN);
+ memcpy(wdev->u.client.ssid, ssid->data, ssid_len);
+ wdev->u.client.ssid_len = ssid_len;
+ break;
+ }
+ rcu_read_unlock();
+ }
+
rcu_read_lock();
for_each_valid_link(cr, link) {
country_elem =
@@ -897,25 +916,6 @@ void __cfg80211_connect_result(struct net_device *dev,
country_data, country_datalen);
kfree(country_data);
- if (!wdev->u.client.ssid_len) {
- rcu_read_lock();
- for_each_valid_link(cr, link) {
- u32 ssid_len;
-
- ssid = ieee80211_bss_get_elem(cr->links[link].bss,
- WLAN_EID_SSID);
-
- if (!ssid || !ssid->datalen)
- continue;
-
- ssid_len = min(ssid->datalen, IEEE80211_MAX_SSID_LEN);
- memcpy(wdev->u.client.ssid, ssid->data, ssid_len);
- wdev->u.client.ssid_len = ssid_len;
- break;
- }
- rcu_read_unlock();
- }
-
return;
out:
for_each_valid_link(cr, link)