From 577f690ce5dc641d9d8646d15bb8e99ff4a8280e Mon Sep 17 00:00:00 2001 From: Johannes Berg Date: Tue, 13 Oct 2026 15:12:58 +0200 Subject: [PATCH] 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 --- net/wireless/sme.c | 38 +++++++++++++++++++------------------- 1 file 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)