[Olsr-dev] freebsd fixes for src/bsd/net.c

Andreas Tønnesen (spam-protected)
Fri Sep 7 10:35:56 CEST 2007


I totally 100% disagree! Not in the mood for a rant
now - so I'll leave it at that :-)

- Andreas

Gianni Costanzi wrote:
> Sorry for the empty email that I've sent before this one :(
>
> I just wanted to say that in my opinion, it is more correct to say
>
> strncpy(dest, src, sizeof(src))
>
> if you want to copy the data pointed by src to the location pointed by
> dest.. You wanto to copy src, and so you give the size of src (you
> must already be sure that dest points to a buffer large enough to hold
> src data)..
>
>       "If the destination string of a strcpy() is not large enough  (that  is,
>       if  the  programmer  was  stupid  or lazy, and failed to check the size
>       before copying) then anything might happen.  Overflowing  fixed  length
>       strings is a favorite cracker technique." - BUGS section of
> "man strncpy" :)
>
> But this is just my opinion... furthermore, I almost always use
> sizeof(struct my_struct) if src is a pointer to a "struct my_struct"
> data structure.
>
> On 9/7/07, John Hay <(spam-protected)> wrote:
>   
>> Hi,
>>
>> The first part fix the broken use of sizeof() and the second part change
>> the wireless interface detection to use the ieee80211 apis. The old
>> wavelan apis has been removed from FreeBSD-current and so the upcoming
>> version 7 will not have it. It should still work on 6.x too.
>>
>> John
>> --
>> John Hay -- (spam-protected) / (spam-protected)
>>
>>
>> --- src/bsd/net.c.orig  2007-05-02 09:41:20.000000000 +0200
>> +++ src/bsd/net.c       2007-08-21 21:01:57.000000000 +0200
>> @@ -71,8 +71,6 @@
>>  #ifndef FBSD_NO_80211
>>  #include <net80211/ieee80211.h>
>>  #include <net80211/ieee80211_ioctl.h>
>> -#include <dev/wi/if_wavelan_ieee.h>
>> -#include <dev/wi/if_wireg.h>
>>  #endif
>>  #endif
>>
>> @@ -557,7 +555,7 @@
>>           sin6 = (const struct sockaddr_in6 *)ifa->ifa_addr;
>>           if (IN6_IS_ADDR_LINKLOCAL(&sin6->sin6_addr))
>>             continue;
>> -         strncpy(ifr6.ifr_name, ifname, sizeof(ifname));
>> +         strncpy(ifr6.ifr_name, ifname, sizeof(ifr6.ifr_name));
>>           if ((s6 = socket(AF_INET6, SOCK_DGRAM, 0)) < 0)
>>             {
>>               OLSR_PRINTF(3, "socket(AF_INET6,SOCK_DGRAM)");
>> @@ -826,19 +824,17 @@
>>  check_wireless_interface(char *ifname)
>>  {
>>  #if defined __FreeBSD__ &&  !defined FBSD_NO_80211
>> -  struct wi_req        wreq;
>> -  struct ifreq ifr;
>> +  /* From FreeBSD ifconfig/ifieee80211.c ieee80211_status() */
>> +  struct ieee80211req ireq;
>> +  u_int8_t data[32];
>> +
>> +  memset(&ireq, 0, sizeof(ireq));
>> +  strlcpy(ireq.i_name, ifname, sizeof(ireq.i_name));
>> +  ireq.i_data = &data;
>> +  ireq.i_type = IEEE80211_IOC_SSID;
>> +  ireq.i_val = -1;
>>
>> -  memset((char *)&wreq, 0, sizeof(wreq));
>> -  memset((char *)&ifr, 0, sizeof(ifr));
>> -
>> -  wreq.wi_len = WI_MAX_DATALEN;
>> -  wreq.wi_type = WI_RID_IFACE_STATS;
>> -
>> -  strlcpy(ifr.ifr_name, ifname, sizeof(ifr.ifr_name));
>> -  ifr.ifr_data = (caddr_t)&wreq;
>> -
>> -  return (ioctl(olsr_cnf->ioctl_s, SIOCGWAVELAN, &ifr) >= 0) ? 1 : 0;
>> +  return (ioctl(olsr_cnf->ioctl_s, SIOCG80211, &ireq) >= 0) ? 1 : 0;
>>  #else
>>    return 0;
>>  #endif
>>
>> --
>> Olsr-dev mailing list
>> (spam-protected)
>> http://lists.olsr.org/mailman/listinfo/olsr-dev
>>
>>     
>
>
>   





More information about the Olsr-dev mailing list