Bladeren bron

cfg80211: allow cfg80211_connect_result with bssid == NULL

In case of connection failure, the bssid info is not a must have.

Signed-off-by: Zhu Yi <yi.zhu@intel.com>
Acked-by: Johannes Berg <johannes@sipsolutions.net>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Zhu Yi 15 jaren geleden
bovenliggende
commit
16a832e785
2 gewijzigde bestanden met toevoegingen van 5 en 2 verwijderingen
  1. 3 1
      net/wireless/core.c
  2. 2 1
      net/wireless/sme.c

+ 3 - 1
net/wireless/core.c

@@ -12,6 +12,7 @@
 #include <linux/debugfs.h>
 #include <linux/debugfs.h>
 #include <linux/notifier.h>
 #include <linux/notifier.h>
 #include <linux/device.h>
 #include <linux/device.h>
+#include <linux/etherdevice.h>
 #include <linux/rtnetlink.h>
 #include <linux/rtnetlink.h>
 #include <net/genetlink.h>
 #include <net/genetlink.h>
 #include <net/cfg80211.h>
 #include <net/cfg80211.h>
@@ -309,7 +310,8 @@ static void cfg80211_process_events(struct wireless_dev *wdev)
 		switch (ev->type) {
 		switch (ev->type) {
 		case EVENT_CONNECT_RESULT:
 		case EVENT_CONNECT_RESULT:
 			__cfg80211_connect_result(
 			__cfg80211_connect_result(
-				wdev->netdev, ev->cr.bssid,
+				wdev->netdev, is_zero_ether_addr(ev->cr.bssid) ?
+				NULL : ev->cr.bssid,
 				ev->cr.req_ie, ev->cr.req_ie_len,
 				ev->cr.req_ie, ev->cr.req_ie_len,
 				ev->cr.resp_ie, ev->cr.resp_ie_len,
 				ev->cr.resp_ie, ev->cr.resp_ie_len,
 				ev->cr.status,
 				ev->cr.status,

+ 2 - 1
net/wireless/sme.c

@@ -450,7 +450,8 @@ void cfg80211_connect_result(struct net_device *dev, const u8 *bssid,
 		return;
 		return;
 
 
 	ev->type = EVENT_CONNECT_RESULT;
 	ev->type = EVENT_CONNECT_RESULT;
-	memcpy(ev->cr.bssid, bssid, ETH_ALEN);
+	if (bssid)
+		memcpy(ev->cr.bssid, bssid, ETH_ALEN);
 	ev->cr.req_ie = ((u8 *)ev) + sizeof(*ev);
 	ev->cr.req_ie = ((u8 *)ev) + sizeof(*ev);
 	ev->cr.req_ie_len = req_ie_len;
 	ev->cr.req_ie_len = req_ie_len;
 	memcpy((void *)ev->cr.req_ie, req_ie, req_ie_len);
 	memcpy((void *)ev->cr.req_ie, req_ie, req_ie_len);