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