[PATCH] wext: really disassociate

Dan Williams dcbw at redhat.com
Fri Feb 6 16:16:34 EST 2009


Really disassociate when tearing stuff down; drivers may sometimes
(legally) keep trying to reassociate unless the BSSID is unlocked.  If
the SSID is unlocked too, under WEXT drivers are able to pick an SSID to
associate, so kill that behavior by setting a bogus SSID.  Unfortunately
WEXT doesn't provide an easy method to say "stop whatever doing and just
idle".

Signed-off-by: Dan Williams <dcbw at redhat.com>

---
Jouni, this patch came out of discussions we had on IRC back in January
and before the holidays in 2008.

diff --git a/src/drivers/driver_wext.c b/src/drivers/driver_wext.c
index 631c63d..fb9d5c6 100644
--- a/src/drivers/driver_wext.c
+++ b/src/drivers/driver_wext.c
@@ -1911,9 +1911,24 @@ static int wpa_driver_wext_disassociate(void *priv, const u8 *addr,
 					int reason_code)
 {
 	struct wpa_driver_wext_data *drv = priv;
+	u8 ssid[32];
+	int ret;
+
 	wpa_printf(MSG_DEBUG, "%s", __FUNCTION__);
-	return wpa_driver_wext_mlme(drv, addr, IW_MLME_DISASSOC,
-				    reason_code);
+
+	ret = wpa_driver_wext_mlme(drv, addr, IW_MLME_DISASSOC,
+	                           reason_code);
+	if (ret == 0) {
+		const u8 null_bssid[ETH_ALEN] = { 0, 0, 0, 0, 0, 0 };
+
+		ret = wpa_driver_wext_set_bssid(drv, null_bssid);
+
+		for (ret = 0; ret < 32; ret++)
+			ssid[ret] = rand() & 0xFF;
+		ret = wpa_driver_wext_set_ssid(drv, ssid, 32);
+	}
+
+	return ret;
 }
 
 



More information about the HostAP mailing list