On Tue, Dec 04, 2007 at 05:03:53AM +0000, Sunny Kim wrote: > Hi, I'm Sunny Kim from SAMSUNG Electro-Mechanics. > I want to give you a bug report. > Please, see my pdf doc attached. > I hope you find this helpful. > > < the first part of pdf doc > > Title: 32 character ESSID not displayed in iwconfig > Reported by: Sunny Kim (sungyi.kim@xxxxxxxxxxx) > Detail descriptions: > I found the problem in net/core/wireless.c when ESSID was 32 character long. > This problem prevents iwconfig from displaying ESSID correctly when ESSID is 32 character long. > > Regards, > Sunny Kim Hi, Thanks for the bug report. This bug is well known and has been reported to me many times over the last 6 months. The kernel maintainers don't want to fix it. The patch for the 2.6.22 and later is attached to this e-mail. Have fun... Jean ---------------------------------------------------------- --- 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