This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] Fix strict-aliasing warning in resolv/res_hconf.c


On 05/20/2015 01:58 AM, Roland McGrath wrote:
>> I am not sure if I am just missing an include or if I simply cannot use
>> the sockaddr_in struct in this header.
> 
> You cannot.  It's a public header and it does not (and should not) define
> any of the AF-specific struct sockaddr_foo types.  I don't think this
> interface can be used in a strictly standard-C-compliant fashion.  We need
> to come up with an idiom or helper code to facilitate using it in whatever
> fashion is closest to compliant and is in fact thoroughly safe.

If the effective type is correct, then using pointer arithmetic to get
from the wrongly typed pointer to the field may help.  See the
_IO_CAST_FIELD_ACCESS macro here:

  <https://sourceware.org/ml/libc-alpha/2015-05/msg00326.html>

But I doubt the effective type is correct here because a generic socket
address is used, which has padding in the form of a char array (which is
not untyped, the char * aliasing rule works only in the opposite direction).

Looking at struct ifreq, it is rather mysterious to me how this is
supposed to work at all.  I mean, struct sockaddr has just 14 bytes
storage for address information, but IPv6 addresses need 16 bytes, and
socket addresses contain even more information than a raw address.

-- 
Florian Weimer / Red Hat Product Security


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]