mirror of
				git://git.openwrt.org/openwrt/openwrt.git
				synced 2025-10-30 13:34:27 -04:00 
			
		
		
		
	
		
			
				
	
	
		
			47 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			47 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
| --- 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;
 | |
|  }
 |