[krbdev.mit.edu #6308] Alignment problem in resolver test
Ken Raeburn via RT
rt-comment at krbdev.mit.edu
Tue Dec 30 13:43:15 EST 2008
On Dec 30, 2008, at 11:42, Jorgen Wahlsten via RT wrote:
> For what it's worth, I think Sun's C compiler *always* aligns the
> automatic
> variables on 8-byte boundaries, while GCC tries to fit the
> addrcopy[4] into
> the "padding" of myname[256+1] (7 bytes padding?), as an
> optimization. It
> does seem strange that this is done *without* optimization though.
I worked on GCC in a past job, so please forgive a brief diversion:
It's not an optimization you'd turn on or off. The "optimization" is
built into the code that decides how the stack frame is laid out. A
char array doesn't need any special alignment, so myname[] doesn't
have padding, it just ends, with the following byte probably at an odd
address; since addrcopy[] is also a char array without special
alignment needs, it's allowed to be put there.
> Regardless, of the differences between Sun's C compiler and GCC, I
> would be
> inclined to agree with you that this is a solaris C library bug,
> that is
> being triggered by using GCC in this particular case.
>
> As for my comment about using an in_addr pointer, I think I merely
> looked at
> the EXAMPLE section in the solaris 2.10 gethostbyaddr man page.
> There is
> also a NOTE in that man page about INET_ADDR.
The POSIX spec I just pulled up says the address argument points to an
address, not a bunch of bytes, and in particular,
> The addr argument of gethostbyaddr() shall be an in_addr structure
> when type is AF_INET.
(Presumably they meant the pointed-to thing.)
So, converting it to an actual in_addr would probably be the right fix
(though it leaves us with IPv6 support still missing in those places).
Ken
More information about the krb5-bugs
mailing list