Commit c38c7018 authored by Marc Bornand's avatar Marc Bornand Committed by Johannes Berg
Browse files

wifi: cfg80211: Set SSID if it is not already set



When a connection was established without going through
NL80211_CMD_CONNECT, the ssid was never set in the wireless_dev struct.
Now we set it in __cfg80211_connect_result() when it is not already set.

When using a userspace configuration that does not call
cfg80211_connect() (can be checked with breakpoints in the kernel),
this patch should allow `networkctl status device_name` to output the
SSID instead of null.

Cc: stable@vger.kernel.org
Reported-by: default avatarYohan Prod'homme <kernel@zoddo.fr>
Fixes: 7b0a0e3c (wifi: cfg80211: do some rework towards MLO link APIs)
Link: https://bugzilla.kernel.org/show_bug.cgi?id=216711


Signed-off-by: default avatarMarc Bornand <dev.mbornand@systemb.ch>
Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
parent ce1ba4d7
Loading
Loading
Loading
Loading
+17 −0
Original line number Diff line number Diff line
@@ -736,6 +736,7 @@ void __cfg80211_connect_result(struct net_device *dev,
{
	struct wireless_dev *wdev = dev->ieee80211_ptr;
	const struct element *country_elem = NULL;
	const struct element *ssid;
	const u8 *country_data;
	u8 country_datalen;
#ifdef CONFIG_CFG80211_WEXT
@@ -894,6 +895,22 @@ 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) {
			ssid = ieee80211_bss_get_elem(cr->links[link].bss,
						      WLAN_EID_SSID);

			if (!ssid || !ssid->datalen)
				continue;

			memcpy(wdev->u.client.ssid, ssid->data, ssid->datalen);
			wdev->u.client.ssid_len = ssid->datalen;
			break;
		}
		rcu_read_unlock();
	}

	return;
out:
	for_each_valid_link(cr, link)