Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 22 Feb 2008 17:25:12 GMT
From:      Sam Leffler <sam@FreeBSD.org>
To:        Perforce Change Reviews <perforce@freebsd.org>
Subject:   PERFORCE change 135972 for review
Message-ID:  <200802221725.m1MHPCR2033418@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=135972

Change 135972 by sam@sam_ebb on 2008/02/22 17:24:37

	o discard auth frames w/ a broadcast bssid
	o move [re]assoc req checks for bssid + authentication up to
	  be before all the hard work

Affected files ...

.. //depot/projects/vap/sys/net80211/ieee80211_hostap.c#16 edit

Differences ...

==== //depot/projects/vap/sys/net80211/ieee80211_hostap.c#16 (text+ko) ====

@@ -1847,6 +1847,12 @@
 			vap->iv_stats.is_rx_mgtdiscard++;
 			return;
 		}
+		if (!IEEE80211_ADDR_EQ(wh->i_addr3, vap->iv_bss->ni_bssid)) {
+			IEEE80211_DISCARD(vap, IEEE80211_MSG_ANY,
+			    wh, NULL, "%s", "wrong bssid");
+			vap->iv_stats.is_rx_wrongbss++;	/*XXX unique stat?*/
+			return;
+		}
 		/*
 		 * auth frame format
 		 *	[2] algorithm
@@ -1919,7 +1925,12 @@
 			vap->iv_stats.is_rx_mgtdiscard++;
 			return;
 		}
-
+		if (!IEEE80211_ADDR_EQ(wh->i_addr3, vap->iv_bss->ni_bssid)) {
+			IEEE80211_DISCARD(vap, IEEE80211_MSG_ANY,
+			    wh, NULL, "%s", "wrong bssid");
+			vap->iv_stats.is_rx_assoc_bss++;
+			return;
+		}
 		if (subtype == IEEE80211_FC0_SUBTYPE_REASSOC_REQ) {
 			reassoc = 1;
 			resp = IEEE80211_FC0_SUBTYPE_REASSOC_RESP;
@@ -1927,6 +1938,17 @@
 			reassoc = 0;
 			resp = IEEE80211_FC0_SUBTYPE_ASSOC_RESP;
 		}
+		if (ni == vap->iv_bss) {
+			IEEE80211_NOTE_MAC(vap, IEEE80211_MSG_ANY, wh->i_addr2,
+			    "deny %s request, sta not authenticated",
+			    reassoc ? "reassoc" : "assoc");
+			ieee80211_send_error(ni, wh->i_addr2,
+			    IEEE80211_FC0_SUBTYPE_DEAUTH,
+			    IEEE80211_REASON_ASSOC_NOT_AUTHED);
+			vap->iv_stats.is_rx_assoc_notauth++;
+			return;
+		}
+
 		/*
 		 * asreq frame format
 		 *	[2] capability information
@@ -1940,12 +1962,6 @@
 		 *	[tlv] Atheros capabilities
 		 */
 		IEEE80211_VERIFY_LENGTH(efrm - frm, (reassoc ? 10 : 4), return);
-		if (!IEEE80211_ADDR_EQ(wh->i_addr3, vap->iv_bss->ni_bssid)) {
-			IEEE80211_DISCARD(vap, IEEE80211_MSG_ANY,
-			    wh, NULL, "%s", "wrong bssid");
-			vap->iv_stats.is_rx_assoc_bss++;
-			return;
-		}
 		capinfo = le16toh(*(uint16_t *)frm);	frm += 2;
 		lintval = le16toh(*(uint16_t *)frm);	frm += 2;
 		if (reassoc)
@@ -1999,16 +2015,6 @@
 			     return);		/* XXX just NULL out? */
 		}
 
-		if (ni == vap->iv_bss) {
-			IEEE80211_NOTE_MAC(vap, IEEE80211_MSG_ANY, wh->i_addr2,
-			    "deny %s request, sta not authenticated",
-			    reassoc ? "reassoc" : "assoc");
-			ieee80211_send_error(ni, wh->i_addr2,
-			    IEEE80211_FC0_SUBTYPE_DEAUTH,
-			    IEEE80211_REASON_ASSOC_NOT_AUTHED);
-			vap->iv_stats.is_rx_assoc_notauth++;
-			return;
-		}
 		if ((vap->iv_flags & IEEE80211_F_WPA) &&
 		    !wpa_assocreq(ni, &rsnparms, wh, wpa, rsn, capinfo))
 			return;



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200802221725.m1MHPCR2033418>