diff options
| author | Johannes Berg <johannes.berg@intel.com> | 2026-10-13 15:12:58 +0200 |
|---|---|---|
| committer | Johannes Berg <johannes.berg@intel.com> | 2026-10-14 12:19:36 +0200 |
| commit | 577f690ce5dc641d9d8646d15bb8e99ff4a8280e (patch) | |
| tree | 751a6bd2fed95c49a204328a4625150c7c2fddfe | |
| parent | a919316bbb700d44baf9cdbf78666bce24261bc8 (diff) | |
| download | linux-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.c | 38 |
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) |
