From b206b7d518eed5545cdc39665e3b4355ff30abf8 Mon Sep 17 00:00:00 2001 From: Daniel Williams Date: Fri, 6 Feb 2009 22:25:50 +0000 Subject: [PATCH] - Fix scan result retrieval in very dense wifi environments --- wpa_supplicant-0.6.7-wext-scan-size.patch | 51 +++++++++++++++++++++++ wpa_supplicant.spec | 7 +++- 2 files changed, 57 insertions(+), 1 deletion(-) create mode 100644 wpa_supplicant-0.6.7-wext-scan-size.patch diff --git a/wpa_supplicant-0.6.7-wext-scan-size.patch b/wpa_supplicant-0.6.7-wext-scan-size.patch new file mode 100644 index 0000000..db3b38f --- /dev/null +++ b/wpa_supplicant-0.6.7-wext-scan-size.patch @@ -0,0 +1,51 @@ +commit 42f1ee7d1fae8a67a2a48adfda19f9aafc3fef32 +Author: Jouni Malinen +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); + diff --git a/wpa_supplicant.spec b/wpa_supplicant.spec index e8bb129..e605023 100644 --- a/wpa_supplicant.spec +++ b/wpa_supplicant.spec @@ -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 - 1:0.6.7-3 +- Fix scan result retrieval in very dense wifi environments + * Fri Feb 6 2009 Dan Williams - 1:0.6.7-2 - Ensure that drivers don't retry association when they aren't supposed to