aboutsummaryrefslogtreecommitdiffstats
path: root/package/hostapd/patches
diff options
context:
space:
mode:
authorFelix Fietkau <nbd@openwrt.org>2006-01-31 21:45:23 +0000
committerFelix Fietkau <nbd@openwrt.org>2006-01-31 21:45:23 +0000
commit2c4b4d39a77494dd432b192ba58ce1f7158e7fcb (patch)
tree8bb171e705b3af209f5a81358baa7573d192d228 /package/hostapd/patches
parentac80b1360263ef63eb71775e3432a1b8e3bf1d80 (diff)
downloadmaster-187ad058-2c4b4d39a77494dd432b192ba58ce1f7158e7fcb.tar.gz
master-187ad058-2c4b4d39a77494dd432b192ba58ce1f7158e7fcb.tar.bz2
master-187ad058-2c4b4d39a77494dd432b192ba58ce1f7158e7fcb.zip
fix hostapd/madwifi crash (#247)
git-svn-id: svn://svn.openwrt.org/openwrt/trunk/openwrt@3102 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'package/hostapd/patches')
-rw-r--r--package/hostapd/patches/100-wpa_fix.patch58
1 files changed, 58 insertions, 0 deletions
diff --git a/package/hostapd/patches/100-wpa_fix.patch b/package/hostapd/patches/100-wpa_fix.patch
new file mode 100644
index 0000000000..502167cbd3
--- /dev/null
+++ b/package/hostapd/patches/100-wpa_fix.patch
@@ -0,0 +1,58 @@
+--- hostapd-0.4.7/driver_madwifi.c 2006-01-30 10:00:44.199096000 -0800
++++ hostapd-0.4.7-new/driver_madwifi.c 2006-01-30 10:05:55.925511000 -0800
+@@ -692,6 +692,7 @@
+ struct hostapd_data *hapd = drv->hapd;
+ struct ieee80211req_wpaie ie;
+ int ielen, res;
++ int rsn = 0;
+
+ /*
+ * Fetch negotiated WPA/RSN parameters from the system.
+@@ -702,26 +703,37 @@
+ printf("Failed to get WPA/RSN information element.\n");
+ return -1; /* XXX not right */
+ }
+- ielen = ie.wpa_ie[1];
+- if (ielen == 0) {
++ if ((ie.wpa_ie[1] == 0) && (ie.rsn_ie[1] == 0)){
+ printf("No WPA/RSN information element for station!?\n");
+ return -1; /* XXX not right */
+ }
++ ielen = ie.rsn_ie[1];
+ ielen += 2;
+- res = wpa_validate_wpa_ie(hapd, sta, ie.wpa_ie, ielen,
+- ie.wpa_ie[0] == WLAN_EID_RSN ?
+- HOSTAPD_WPA_VERSION_WPA2 : HOSTAPD_WPA_VERSION_WPA);
+- if (res != WPA_IE_OK) {
+- printf("WPA/RSN information element rejected? (res %u)\n", res);
+- return -1;
+- }
++ res = wpa_validate_wpa_ie(hapd, sta, ie.rsn_ie, ielen,
++ HOSTAPD_WPA_VERSION_WPA2);
++ if (res != WPA_IE_OK){
++ // now look for WPA IE
++ ielen = ie.wpa_ie[1];
++ ielen += 2;
++ res = wpa_validate_wpa_ie(hapd, sta, ie.wpa_ie, ielen,
++ HOSTAPD_WPA_VERSION_WPA);
++ if (res != WPA_IE_OK) {
++ printf("WPA/RSN information element rejected? (res %u)\n", res);
++ return -1;
++ }
++ } else {
++ rsn = 1;
++ }
+ free(sta->wpa_ie);
+ sta->wpa_ie = malloc(ielen);
+ if (sta->wpa_ie == NULL) {
+ printf("No memory to save WPA/RSN information element!\n");
+ return -1;
+ }
+- memcpy(sta->wpa_ie, ie.wpa_ie, ielen);
++ if (rsn)
++ memcpy(sta->wpa_ie, ie.rsn_ie, ielen);
++ else
++ memcpy(sta->wpa_ie, ie.wpa_ie, ielen);
+ sta->wpa_ie_len = ielen;
+ return 0;
+ }
a id='n268' href='#n268'>268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328