You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@harmony.apache.org by Mark Hindess <ma...@googlemail.com> on 2008/08/20 12:59:39 UTC
[classlib][portlib] Bug in IPv6 native code?
In modules/portlib/src/main/native/port/unix/hysock.c on line 4821, I see:
interfaces[currentAdapterIndex].
addresses[currentIPAddressIndex].scope =
&(((struct sockaddr_in6 *) (&ifc.ifc_req[counter].
ifr_addr))->
sin6_scope_id);
but interfaces[currentAdapterIndex].addresses[currentIPAddressIndex].scope
is a U_32 as defined in modules/portlib/src/main/native/include/unix/hysock.h
on line 260.
So we are assigning an address to a U_32 which definitely isn't a good idea
on 64-bit platforms. Even on 32-bit platforms I can't understand why we'd
want to do this. The other assignment to the same field on line 4296 of
hysock.c looks like:
interfaces[counter].
addresses[currentIPAddressIndex].
scope =
returnedAddrHeader->ifa_index;
which seems a little more reasonable as ifa_index is also a U_32.
These definitely seem inconsistent but it is not immediately obvious to
me what the correct fix is. Anyone any ideas?
Regards,
Mark.
Re: [classlib][portlib] Bug in IPv6 native code?
Posted by Tim Ellison <t....@gmail.com>.
Mark Hindess wrote:
> In modules/portlib/src/main/native/port/unix/hysock.c on line 4821, I see:
>
> interfaces[currentAdapterIndex].
> addresses[currentIPAddressIndex].scope =
> &(((struct sockaddr_in6 *) (&ifc.ifc_req[counter].
> ifr_addr))->
> sin6_scope_id);
>
> but interfaces[currentAdapterIndex].addresses[currentIPAddressIndex].scope
> is a U_32 as defined in modules/portlib/src/main/native/include/unix/hysock.h
> on line 260.
>
> So we are assigning an address to a U_32 which definitely isn't a good idea
> on 64-bit platforms. Even on 32-bit platforms I can't understand why we'd
> want to do this. The other assignment to the same field on line 4296 of
> hysock.c looks like:
>
> interfaces[counter].
> addresses[currentIPAddressIndex].
> scope =
> returnedAddrHeader->ifa_index;
>
> which seems a little more reasonable as ifa_index is also a U_32.
>
> These definitely seem inconsistent but it is not immediately obvious to
> me what the correct fix is. Anyone any ideas?
That function is a bit of a nightmare, but looking at the definition of
hyipAddress_struct I would imagine that the 32-bit sin6_scope_id *value*
should be copied not the address of the field.
Reading the code I'd be inclined to consider removing the spurious &
(though I'd have to run it through the debugger to see if that was right).
Regards,
Tim