Search Linux Wireless

[PATCH] Fix NetworkManager/wpa_supplicant race condition

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This patch fixes an assumption made by wpa_supplicant. Any time
wpa_supplicant requests to set an ESSID (e.g., associate), it expects an
event notifying that association has completed. If the Networkmanager
has already setup an association, such as for an open auth AP, then the
request to associate by wpa_supplicant will be ignored.

If Networkmanager is requested to restart the connection, such as by
clicking on the SSID, then wpa_supplicant is allowed to build the
association from scratch, which always works.

https://bugs.launchpad.net/ubuntu/+source/linux-source-2.6.20/+bug/103768

By always emitting this event, am I causing any unintended side effects?

rtg
-- 
Tim Gardner tim.gardner@xxxxxxxxxx
diff --git a/net/ieee80211/softmac/ieee80211softmac_wx.c b/net/ieee80211/softmac/ieee80211softmac_wx.c
index fa2f7da..cc2e8ba 100644
--- a/net/ieee80211/softmac/ieee80211softmac_wx.c
+++ b/net/ieee80211/softmac/ieee80211softmac_wx.c
@@ -88,6 +88,13 @@ ieee80211softmac_wx_set_essid(struct net_device *net_dev,
 		   !memcmp(n->essid.data, extra, n->essid.len)) {
 			dprintk(KERN_INFO PFX "Already associating or associated to "MAC_FMT"\n",
 				MAC_ARG(sm->associnfo.bssid));
+			/* wpa_supplicant expects an association event, regardless of prior
+			 * association state. If associating, then the associnfo.work task
+			 * will send the appropriate event.
+			 */
+			if (sm->associnfo.associated)
+				ieee80211softmac_call_events_locked(sm,
+					IEEE80211SOFTMAC_EVENT_ASSOCIATED, n);
 			goto out;
 		} else {
 			dprintk(KERN_INFO PFX "Canceling existing associate request!\n");

[Index of Archives]     [Linux Host AP]     [ATH6KL]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Linux Kernel]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Device Mapper]
  Powered by Linux