Search Linux Wireless

[PATCH 2.6.23] WE : Fix ESSID API

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



	Hi,

	The hack introduced one year ago to support the old ESSID API
is proving even more problematic than I first though. It does not
work, and therefore it need to be removed.

	First problem : you can not read an ESSID with 32
char. Philippe Teuwen was the first one to report that, followed by
the MadWifi team :
                http://madwifi.org/ticket/930
	This is trivial to test. You just set an ESSID with 32
character using iwconfig, and you will see that iwconfig won't display
it back.
	More info :
		http://marc.info/?t=118401941300001&r=1&w=2

	Second problem : a spurious NUL character is always appended
to the ESSID. Johannes ask me to change iwconfig to display non-ascii
characters in ESSID, and this bug is preventing this change.
	If you use a version of iwconfig aware of non-ASCII
characters (30.pre1), this is what it will display :
---------------------------------------------------
eth0      IEEE 802.11b  ESSID:"my_essid\x00"
---------------------------------------------------
	Supporting non-ASCII characters in ESSID is getting more and
more important, as more an more network out there are starting to use
them. The painful API change started 18 months ago was designed to
enable that, but unfortunately this is not yet the possible.
	More info :
		http://marc.info/?t=118958503300003&r=1&w=2

	The patch was tested for weeks on 2.6.22, and tested quickly
on 2.6.23-rc6. I also have a patch for 2.6.20/2.6.21.

	In my personal opinion, this patch is totally safe and should
go ASAP in the kernel and in the stable series. However, I understand
that you are not confortable with it, therefore a compromise would be
to push it in 2.6.24-pre1, and once it has baked enough in 2.6.24-pre,
to push it to the stable series (2.6.20 - not applicable to 2.6.16).

	Johannes : would you mind adding your own comments ?

	Thanks...

        Jean

Signed-off-by: Jean Tourrilhes <jt@xxxxxxxxxx>

-----------------------------------------------------------

--- linux/net/wireless/wext.j1.c	2007-07-09 13:19:22.000000000 -0700
+++ linux/net/wireless/wext.c	2007-07-09 13:19:59.000000000 -0700
@@ -741,39 +741,11 @@ static int ioctl_standard_call(struct ne
 		int	extra_size;
 		int	user_length = 0;
 		int	err;
-		int	essid_compat = 0;
 
 		/* Calculate space needed by arguments. Always allocate
 		 * for max space. Easier, and won't last long... */
 		extra_size = descr->max_tokens * descr->token_size;
 
-		/* Check need for ESSID compatibility for WE < 21 */
-		switch (cmd) {
-		case SIOCSIWESSID:
-		case SIOCGIWESSID:
-		case SIOCSIWNICKN:
-		case SIOCGIWNICKN:
-			if (iwr->u.data.length == descr->max_tokens + 1)
-				essid_compat = 1;
-			else if (IW_IS_SET(cmd) && (iwr->u.data.length != 0)) {
-				char essid[IW_ESSID_MAX_SIZE + 1];
-
-				err = copy_from_user(essid, iwr->u.data.pointer,
-						     iwr->u.data.length *
-						     descr->token_size);
-				if (err)
-					return -EFAULT;
-
-				if (essid[iwr->u.data.length - 1] == '\0')
-					essid_compat = 1;
-			}
-			break;
-		default:
-			break;
-		}
-
-		iwr->u.data.length -= essid_compat;
-
 		/* Check what user space is giving us */
 		if (IW_IS_SET(cmd)) {
 			/* Check NULL pointer */
@@ -811,7 +783,6 @@ static int ioctl_standard_call(struct ne
 		}
 
 		/* Create the kernel buffer */
-		/*    kzalloc ensures NULL-termination for essid_compat */
 		extra = kzalloc(extra_size, GFP_KERNEL);
 		if (extra == NULL)
 			return -ENOMEM;
@@ -830,8 +801,6 @@ static int ioctl_standard_call(struct ne
 		/* Call the handler */
 		ret = handler(dev, &info, &(iwr->u), extra);
 
-		iwr->u.data.length += essid_compat;
-
 		/* If we have something to return to the user */
 		if (!ret && IW_IS_GET(cmd)) {
 			/* Check if there is enough buffer up there */

-
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Host AP]     [ATH6KL]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Linux Kernel]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Device Mapper]
  Powered by Linux