Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 24 Mar 2023 19:41:15 +0000
From:      obiwac <obiwac@gmail.com>
To:        freebsd-hackers <freebsd-hackers@freebsd.org>
Subject:   net80211 association failures in station mode
Message-ID:  <CAN8-kNWaW4MypL-L5WJRJg3MNfCyha5nGdzXL=jScGVDb%2Br5pQ@mail.gmail.com>

next in thread | raw e-mail | index | archive | help
Hey,

Recently I've been getting a lot of association failures with wpa_supplicant(8).

I looked into things a little and found that the issue comes when
iterating over the sta scan table with mlmelookup
(sys/net80211/ieee80211_ioctl.c) in setmlme_assoc_sta, which first
checks if the MAC addresses are equal between the query and a scan
entry, and then checks if the SSID's are equal. (Minor issue but the
"Match mac address and *any* ssid." comment above is wrong, right?)

Thing is that query used when calling setmlme_assoc_sta (in
ieee80211_ioctl_setmlme) is the vap's SSID (vap->iv_des_ssid[0]),
whereas the one used when calling setmlme_assoc_adhoc for adhoc
networks is the SSID contained in the MLME request structure
(mlme.im_ssid):

	static int
	ieee80211_ioctl_setmlme(struct ieee80211vap *vap, struct ieee80211req *ireq)
	{
		struct ieee80211req_mlme mlme;
		...
		int error = copyin(ireq->i_data, &mlme, sizeof(mlme));
		...
		if  (vap->iv_opmode == IEEE80211_M_STA &&
		    mlme.im_op == IEEE80211_MLME_ASSOC)
			return setmlme_assoc_sta(vap, mlme.im_macaddr,
			    vap->iv_des_ssid[0].len, vap->iv_des_ssid[0].ssid);

		else if ((vap->iv_opmode == IEEE80211_M_IBSS ||
		    vap->iv_opmode == IEEE80211_M_AHDEMO) &&
		    mlme.im_op == IEEE80211_MLME_ASSOC)
			return setmlme_assoc_adhoc(vap, mlme.im_macaddr,
			    mlme.im_ssid_len, mlme.im_ssid);
		...
	}

I would have expected these SSID arguments be the other way around,
because e.g. when wpa_supplicant(8) tries to associate in station
mode, it sets the wanted SSID in the MLME request structure and then
calls IEEE802_IOC_MLME - in fact, when reversing these arguments, I
can associate no problem and things operate as I'd expect again...

But since this code has last been touched over a decade ago, I feel
like there's something I'm missing/doing wrong here :P

If this is indeed wrong I'll make a diff :)

Thanks in advance,
Aymeric



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAN8-kNWaW4MypL-L5WJRJg3MNfCyha5nGdzXL=jScGVDb%2Br5pQ>