(usagi-users 04085) Re: mip6d portability issues

Jozsef Kovacs <[email protected]> Sat, 15 Nov 2008 17:11:18 +0100
Newsgroups gmane.linux.ipv6.usagi.users
Message-ID <[email protected]>
Hi Romain,

I simply replaced the sizeof part to a predefined size. It's ugly, but I 
didn't want to modify the headers as they are part of *libc and not 
mip6d. None of the structs in netinet/* are packed. I think the correct 
fix would be to stop checking data taken from the network against struct 
sizes assuming they will have the correct size.

Regards,
Jozsef
Romain KUNTZ wrote:
> Hi Jozsef,
>
> On 2008/11/07, at 2:20, Jozsef Kovacs wrote:
>> nd_opt_hdr is not a packed struct (defined in netinet/icmp6.h) and 
>> it's not guaranteed that the length of the struct (two uint8_t 
>> fields) will be 2 bytes on every architecture, thereby dropping a 
>> completely valid RA packet. In my case on an arm device the size of 
>> the struct was 4bytes.
>
> We think this is a header file bug: structures should be packed in 
> order to avoid such issues. We will investigate that on our side in 
> order to check if a change in the header file is possible. That would 
> avoid to implement workarounds in the userland code.
>
>> By fixing this the daemon worked correctly, but there still might be 
>> some hidden bugs caused by sizeof(struct) checks.
>
> Do you mean that you have just added a "packed" attribute to the 
> structure in the header file? Or modified the userland code? Please 
> send us a patch of your fix if you don't mind.
>
> Regards,