Date: Mon, 20 Mar 2006 16:22:47 +0100 (CET) From: Rudolf Cejka <cejkar@fit.vutbr.cz> To: FreeBSD-gnats-submit@FreeBSD.org Subject: bin/94735: [patch] NDIS driver plus wpa_supplicant does not work Message-ID: <200603201522.k2KFMlWV015962@kazi.fit.vutbr.cz> Resent-Message-ID: <200603201530.k2KFUCeS005191@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
>Number: 94735 >Category: bin >Synopsis: [patch] NDIS driver plus wpa_supplicant does not work >Confidential: no >Severity: non-critical >Priority: medium >Responsible: freebsd-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: sw-bug >Submitter-Id: current-users >Arrival-Date: Mon Mar 20 15:30:12 GMT 2006 >Closed-Date: >Last-Modified: >Originator: Rudolf Cejka >Release: FreeBSD 5.3-STABLE i386 >Organization: FIT, Brno University of Technology, Czech Republic >Environment: FreeBSD 7.0-current Mar 17 2006 >Description: Function PacketGetAdapterNames() in usr.sbin/wpa/wpa_supplicant/Packet32.c has different semantics, than is expected by wpa_supplicant, which takes result == 0 as an error and result != 0 as a success. Unfortunately PacketGetAdapterNames() behaves in exactly different way. >How-To-Repeat: >Fix: --- usr.sbin/wpa/wpa_supplicant/Packet32.c.orig Mon Mar 20 16:07:18 2006 +++ usr.sbin/wpa/wpa_supplicant/Packet32.c Mon Mar 20 16:07:50 2006 @@ -246,15 +246,15 @@ mib[5] = 0; /* no flags */ if (sysctl (mib, 6, NULL, &needed, NULL, 0) < 0) - return(EIO); + return(0); buf = malloc (needed); if (buf == NULL) - return(ENOMEM); + return(0); if (sysctl (mib, 6, buf, &needed, NULL, 0) < 0) { free(buf); - return(EIO); + return(0); } lim = buf + needed; @@ -269,7 +269,7 @@ if (strnstr(sdl->sdl_data, "ndis", sdl->sdl_nlen)) { if ((spc + sdl->sdl_nlen) > *len) { free(buf); - return(ENOSPC); + return(0); } strncpy(plist, sdl->sdl_data, sdl->sdl_nlen); plist += (sdl->sdl_nlen + 1); @@ -302,7 +302,7 @@ if (strnstr(sdl->sdl_data, "ndis", sdl->sdl_nlen)) { if ((spc + sdl->sdl_nlen) > *len) { free(buf); - return(ENOSPC); + return(0); } strncpy(plist, sdl->sdl_data, sdl->sdl_nlen); plist += (sdl->sdl_nlen + 1); @@ -317,7 +317,7 @@ *len = spc + 1; - return(0); + return(1); } void PS: Here is another patch, if the bug is considered in wpa_supplicant: --- contrib/wpa_supplicant/driver_ndis.c.orig Mon Mar 20 16:00:40 2006 +++ contrib/wpa_supplicant/driver_ndis.c Mon Mar 20 16:01:40 2006 @@ -1429,7 +1429,7 @@ memset(names, 0, len); res = PacketGetAdapterNames(names, &len); - if (!res && len > 8192) { + if (res && len > 8192) { free(names); names = malloc(len); if (names == NULL) @@ -1438,7 +1438,7 @@ res = PacketGetAdapterNames(names, &len); } - if (!res) { + if (res) { wpa_printf(MSG_ERROR, "NDIS: Failed to get adapter list " "(PacketGetAdapterNames)"); free(names); >Release-Note: >Audit-Trail: >Unformatted:
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200603201522.k2KFMlWV015962>