cfg80211: ignore invalid BSSIDs when looking for BSSes
authorJohannes Berg <johannes.berg@intel.com>
Wed, 9 Apr 2014 20:36:50 +0000 (22:36 +0200)
committerJohannes Berg <johannes.berg@intel.com>
Thu, 10 Apr 2014 08:09:18 +0000 (10:09 +0200)
When looking for a BSS matching given parameters, ignore invalid
BSSIDs. This avoids, for example, trying to join an IBSS that has
a multicast BSSID, which isn't supported by all drivers nor is it
a valid configuration of the IBSS so better create a new one with
a correctly chosen random BSSID.

Signed-off-by: Johannes Berg <johannes.berg@intel.com>
net/wireless/scan.c

index 13f611469e6c6c1c0e6b8956fbebb1b8bf4a98bd..cf478c075ddc2d490ffadec55ea77bec511466ca 100644 (file)
@@ -540,6 +540,8 @@ struct cfg80211_bss *cfg80211_get_bss(struct wiphy *wiphy,
                        continue;
                if (channel && bss->pub.channel != channel)
                        continue;
+               if (!is_valid_ether_addr(bss->pub.bssid))
+                       continue;
                /* Don't get expired BSS structs */
                if (time_after(now, bss->ts + IEEE80211_SCAN_RESULT_EXPIRE) &&
                    !atomic_read(&bss->hold))