cfg80211: validate IBSS BSSID
authorJohannes Berg <johannes.berg@intel.com>
Fri, 16 Sep 2011 11:45:25 +0000 (13:45 +0200)
committerJohn W. Linville <linville@tuxdriver.com>
Mon, 19 Sep 2011 20:10:13 +0000 (16:10 -0400)
The IBSS BSSID is never validated, so an
invalid one might end up being used. Fix
this by rejecting invalid configuration.

Reported-by: Marek Lindner <lindner_marek@yahoo.de>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
net/wireless/nl80211.c

index 1108954..430b432 100644 (file)
@@ -4527,8 +4527,12 @@ static int nl80211_join_ibss(struct sk_buff *skb, struct genl_info *info)
 
        wiphy = &rdev->wiphy;
 
-       if (info->attrs[NL80211_ATTR_MAC])
+       if (info->attrs[NL80211_ATTR_MAC]) {
                ibss.bssid = nla_data(info->attrs[NL80211_ATTR_MAC]);
+
+               if (!is_valid_ether_addr(ibss.bssid))
+                       return -EINVAL;
+       }
        ibss.ssid = nla_data(info->attrs[NL80211_ATTR_SSID]);
        ibss.ssid_len = nla_len(info->attrs[NL80211_ATTR_SSID]);