- Fix scan result retrieval in very dense wifi environments

This commit is contained in:
Daniel Williams 2009-02-06 22:25:50 +00:00
parent d455e80fd8
commit b206b7d518
2 changed files with 57 additions and 1 deletions

View File

@ -0,0 +1,51 @@
commit 42f1ee7d1fae8a67a2a48adfda19f9aafc3fef32
Author: Jouni Malinen <jouni.malinen@atheros.com>
Date: Thu Feb 5 12:00:23 2009 +0200
Fixed scan buffer increasing with WEXT
We can now handle up to 65535 byte result buffer which is the maximum
due to WEXT using 16-bit length field. Previously, this was limited to
32768 bytes in practice even through we tried with 65536 and 131072
buffers which we just truncated into 0 in the 16-bit variable.
This more or less doubles the number of BSSes we can received from scan
results.
diff --git a/src/drivers/driver_nl80211.c b/src/drivers/driver_nl80211.c
index 5e40cd2..2646270 100644
--- a/src/drivers/driver_nl80211.c
+++ b/src/drivers/driver_nl80211.c
@@ -1565,10 +1565,12 @@ static u8 * wpa_driver_nl80211_giwscan(struct wpa_driver_nl80211_data *drv,
if (ioctl(drv->ioctl_sock, SIOCGIWSCAN, &iwr) == 0)
break;
- if (errno == E2BIG && res_buf_len < 100000) {
+ if (errno == E2BIG && res_buf_len < 65535) {
os_free(res_buf);
res_buf = NULL;
res_buf_len *= 2;
+ if (res_buf_len > 65535)
+ res_buf_len = 65535; /* 16-bit length field */
wpa_printf(MSG_DEBUG, "Scan results did not fit - "
"trying larger buffer (%lu bytes)",
(unsigned long) res_buf_len);
diff --git a/src/drivers/driver_wext.c b/src/drivers/driver_wext.c
index b6273e5..631c63d 100644
--- a/src/drivers/driver_wext.c
+++ b/src/drivers/driver_wext.c
@@ -1140,10 +1140,12 @@ static u8 * wpa_driver_wext_giwscan(struct wpa_driver_wext_data *drv,
if (ioctl(drv->ioctl_sock, SIOCGIWSCAN, &iwr) == 0)
break;
- if (errno == E2BIG && res_buf_len < 100000) {
+ if (errno == E2BIG && res_buf_len < 65535) {
os_free(res_buf);
res_buf = NULL;
res_buf_len *= 2;
+ if (res_buf_len > 65535)
+ res_buf_len = 65535; /* 16-bit length field */
wpa_printf(MSG_DEBUG, "Scan results did not fit - "
"trying larger buffer (%lu bytes)",
(unsigned long) res_buf_len);

View File

@ -2,7 +2,7 @@ Summary: WPA/WPA2/IEEE 802.1X Supplicant
Name: wpa_supplicant
Epoch: 1
Version: 0.6.7
Release: 2%{?dist}
Release: 3%{?dist}
License: BSD
Group: System Environment/Base
Source0: http://hostap.epitest.fi/releases/%{name}-%{version}.tar.gz
@ -19,6 +19,7 @@ Patch3: wpa_supplicant-0.5.7-use-IW_ENCODE_TEMP.patch
Patch4: wpa_supplicant-0.5.10-dbus-service-file.patch
Patch5: wpa_supplicant-0.6.7-quiet-scan-results-message.patch
Patch6: wpa-supplicant-0.6.7-really-disassoc.patch
Patch7: wpa_supplicant-0.6.7-wext-scan-size.patch
URL: http://w1.fi/wpa_supplicant/
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
@ -53,6 +54,7 @@ Graphical User Interface for wpa_supplicant written using QT3
%patch4 -p1 -b .dbus-service-file
%patch5 -p1 -b .quiet-scan-results-msg
%patch6 -p1 -b .really-disassociate
%patch7 -p1 -b .lots-o-scan-results
%build
pushd wpa_supplicant
@ -143,6 +145,9 @@ fi
%{_bindir}/wpa_gui
%changelog
* Fri Feb 6 2009 Dan Williams <dcbw@redhat.com> - 1:0.6.7-3
- Fix scan result retrieval in very dense wifi environments
* Fri Feb 6 2009 Dan Williams <dcbw@redhat.com> - 1:0.6.7-2
- Ensure that drivers don't retry association when they aren't supposed to