PERFORCE change 118564 for review

Sam Leffler sam at FreeBSD.org
Sun Apr 22 06:18:34 UTC 2007


http://perforce.freebsd.org/chv.cgi?CH=118564

Change 118564 by sam at sam_ebb on 2007/04/22 06:18:23

	give IEEE80211_VERIFY_LENGTH and action parameter so it can
	be do something other than return on failure; will be used
	for 11n support

Affected files ...

.. //depot/projects/wifi/sys/net80211/ieee80211_input.c#101 edit

Differences ...

==== //depot/projects/wifi/sys/net80211/ieee80211_input.c#101 (text+ko) ====

@@ -1347,7 +1347,7 @@
 	}								\
 } while (0)
 
-#define	IEEE80211_VERIFY_LENGTH(_len, _minlen) do {			\
+#define	IEEE80211_VERIFY_LENGTH(_len, _minlen, _action) do {		\
 	if ((_len) < (_minlen)) {					\
 		IEEE80211_DISCARD(ic, IEEE80211_MSG_ELEMID,		\
 		    wh, ieee80211_mgt_subtype_name[subtype >>		\
@@ -1355,7 +1355,7 @@
 		    "ie too short, got %d, expected %d",		\
 		    (_len), (_minlen));					\
 		ic->ic_stats.is_rx_elem_toosmall++;			\
-		return;							\
+		_action;						\
 	}								\
 } while (0)
 
@@ -2027,7 +2027,7 @@
 		 *	[tlv] WPA or RSN
 		 *	[tlv] Atheros capabilities
 		 */
-		IEEE80211_VERIFY_LENGTH(efrm - frm, 12);
+		IEEE80211_VERIFY_LENGTH(efrm - frm, 12, return);
 		memset(&scan, 0, sizeof(scan));
 		scan.tstamp  = frm;				frm += 8;
 		scan.bintval = le16toh(*(u_int16_t *)frm);	frm += 2;
@@ -2036,7 +2036,7 @@
 		scan.chan = scan.bchan;
 
 		while (efrm - frm > 1) {
-			IEEE80211_VERIFY_LENGTH(efrm - frm, frm[1] + 2);
+			IEEE80211_VERIFY_LENGTH(efrm - frm, frm[1] + 2, return);
 			switch (*frm) {
 			case IEEE80211_ELEMID_SSID:
 				scan.ssid = frm;
@@ -2327,7 +2327,7 @@
 		 */
 		ssid = rates = xrates = ath = NULL;
 		while (efrm - frm > 1) {
-			IEEE80211_VERIFY_LENGTH(efrm - frm, frm[1] + 2);
+			IEEE80211_VERIFY_LENGTH(efrm - frm, frm[1] + 2, return);
 			switch (*frm) {
 			case IEEE80211_ELEMID_SSID:
 				ssid = frm;
@@ -2413,7 +2413,7 @@
 		 *	[2] status
 		 *	[tlv*] challenge
 		 */
-		IEEE80211_VERIFY_LENGTH(efrm - frm, 6);
+		IEEE80211_VERIFY_LENGTH(efrm - frm, 6, return);
 		algo   = le16toh(*(u_int16_t *)frm);
 		seq    = le16toh(*(u_int16_t *)(frm + 2));
 		status = le16toh(*(u_int16_t *)(frm + 4));
@@ -2499,7 +2499,7 @@
 		 *	[tlv] WPA or RSN
 		 *	[tlv] Atheros capabilities
 		 */
-		IEEE80211_VERIFY_LENGTH(efrm - frm, (reassoc ? 10 : 4));
+		IEEE80211_VERIFY_LENGTH(efrm - frm, (reassoc ? 10 : 4), return);
 		if (!IEEE80211_ADDR_EQ(wh->i_addr3, ic->ic_bss->ni_bssid)) {
 			IEEE80211_DISCARD(ic, IEEE80211_MSG_ANY,
 			    wh, ieee80211_mgt_subtype_name[subtype >>
@@ -2514,7 +2514,7 @@
 			frm += 6;	/* ignore current AP info */
 		ssid = rates = xrates = wpa = rsn = wme = ath = NULL;
 		while (efrm - frm > 1) {
-			IEEE80211_VERIFY_LENGTH(efrm - frm, frm[1] + 2);
+			IEEE80211_VERIFY_LENGTH(efrm - frm, frm[1] + 2, return);
 			switch (*frm) {
 			case IEEE80211_ELEMID_SSID:
 				ssid = frm;
@@ -2749,7 +2749,7 @@
 		 *	[tlv] extended supported rates
 		 *	[tlv] WME
 		 */
-		IEEE80211_VERIFY_LENGTH(efrm - frm, 6);
+		IEEE80211_VERIFY_LENGTH(efrm - frm, 6, return);
 		ni = ic->ic_bss;
 		capinfo = le16toh(*(u_int16_t *)frm);
 		frm += 2;
@@ -2770,7 +2770,7 @@
 
 		rates = xrates = wme = NULL;
 		while (efrm - frm > 1) {
-			IEEE80211_VERIFY_LENGTH(efrm - frm, frm[1] + 2);
+			IEEE80211_VERIFY_LENGTH(efrm - frm, frm[1] + 2, return);
 			switch (*frm) {
 			case IEEE80211_ELEMID_RATES:
 				rates = frm;
@@ -2870,7 +2870,7 @@
 		 * deauth frame format
 		 *	[2] reason
 		 */
-		IEEE80211_VERIFY_LENGTH(efrm - frm, 2);
+		IEEE80211_VERIFY_LENGTH(efrm - frm, 2, return);
 		reason = le16toh(*(u_int16_t *)frm);
 		ic->ic_stats.is_rx_deauth++;
 		IEEE80211_NODE_STAT(ni, rx_deauth);
@@ -2912,7 +2912,7 @@
 		 * disassoc frame format
 		 *	[2] reason
 		 */
-		IEEE80211_VERIFY_LENGTH(efrm - frm, 2);
+		IEEE80211_VERIFY_LENGTH(efrm - frm, 2, return);
 		reason = le16toh(*(u_int16_t *)frm);
 		ic->ic_stats.is_rx_disassoc++;
 		IEEE80211_NODE_STAT(ni, rx_disassoc);


More information about the p4-projects mailing list