Jelajahi Sumber

Increase iwlist buffer size

SVN-Revision: 32777
Hamish Guthrie 13 tahun lalu
induk
melakukan
4d844e10ab

+ 1 - 1
package/wireless-tools/Makefile

@@ -10,7 +10,7 @@ include $(TOPDIR)/rules.mk
 PKG_NAME:=wireless-tools
 PKG_VERSION:=29
 PKG_MINOR:=
-PKG_RELEASE:=4
+PKG_RELEASE:=5
 
 PKG_SOURCE:=wireless_tools.$(PKG_VERSION)$(PKG_MINOR).tar.gz
 PKG_SOURCE_URL:=http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux

+ 46 - 0
package/wireless-tools/patches/004-increase_iwlist_buffer.patch

@@ -0,0 +1,46 @@
+--- a/iwlist.c
++++ b/iwlist.c
+@@ -792,7 +792,8 @@ print_scanning_info(int		skfd,
+ 	  if(iw_get_ext(skfd, ifname, SIOCGIWSCAN, &wrq) < 0)
+ 	    {
+ 	      /* Check if buffer was too small (WE-17 only) */
+-	      if((errno == E2BIG) && (range.we_version_compiled > 16))
++	      if((errno == E2BIG) && (range.we_version_compiled > 16)
++	         && (buflen < 0xFFFF))
+ 		{
+ 		  /* Some driver may return very large scan results, either
+ 		   * because there are many cells, or because they have many
+@@ -808,6 +809,10 @@ print_scanning_info(int		skfd,
+ 		  else
+ 		    buflen *= 2;
+ 
++                 /* wrq.u.data.length is 16 bits so max size is 65535 */
++                 if(buflen > 0xFFFF)
++                   buflen = 0xFFFF;
++
+ 		  /* Try again */
+ 		  goto realloc;
+ 		}
+@@ -2152,6 +2157,7 @@ main(int	argc,
+   char **args;			/* Command arguments */
+   int count;			/* Number of arguments */
+   const iwlist_cmd *iwcmd;
++  int goterr = 0;
+ 
+   if(argc < 2)
+     iw_usage(1);
+@@ -2199,12 +2205,12 @@ main(int	argc,
+ 
+   /* do the actual work */
+   if (dev)
+-    (*iwcmd->fn)(skfd, dev, args, count);
++    goterr = (*iwcmd->fn)(skfd, dev, args, count);
+   else
+     iw_enum_devices(skfd, iwcmd->fn, args, count);
+ 
+   /* Close the socket. */
+   iw_sockets_close(skfd);
+ 
+-  return 0;
++  return goterr;
+ }