Root/package/network/utils/wireless-tools/patches/004-increase_iwlist_buffer.patch

1--- a/iwlist.c
2+++ b/iwlist.c
3@@ -792,7 +792,8 @@ print_scanning_info(int skfd,
4       if(iw_get_ext(skfd, ifname, SIOCGIWSCAN, &wrq) < 0)
5         {
6           /* Check if buffer was too small (WE-17 only) */
7- if((errno == E2BIG) && (range.we_version_compiled > 16))
8+ if((errno == E2BIG) && (range.we_version_compiled > 16)
9+ && (buflen < 0xFFFF))
10         {
11           /* Some driver may return very large scan results, either
12            * because there are many cells, or because they have many
13@@ -808,6 +809,10 @@ print_scanning_info(int skfd,
14           else
15             buflen *= 2;
16 
17+ /* wrq.u.data.length is 16 bits so max size is 65535 */
18+ if(buflen > 0xFFFF)
19+ buflen = 0xFFFF;
20+
21           /* Try again */
22           goto realloc;
23         }
24@@ -2152,6 +2157,7 @@ main(int argc,
25   char **args; /* Command arguments */
26   int count; /* Number of arguments */
27   const iwlist_cmd *iwcmd;
28+ int goterr = 0;
29 
30   if(argc < 2)
31     iw_usage(1);
32@@ -2199,12 +2205,12 @@ main(int argc,
33 
34   /* do the actual work */
35   if (dev)
36- (*iwcmd->fn)(skfd, dev, args, count);
37+ goterr = (*iwcmd->fn)(skfd, dev, args, count);
38   else
39     iw_enum_devices(skfd, iwcmd->fn, args, count);
40 
41   /* Close the socket. */
42   iw_sockets_close(skfd);
43 
44- return 0;
45+ return goterr;
46 }
47

Archive Download this file



interactive