diff options
author | Rich Felker <dalias@aerifal.cx> | 2016-06-09 13:42:06 -0400 |
---|---|---|
committer | Rich Felker <dalias@aerifal.cx> | 2016-06-09 13:42:06 -0400 |
commit | 1e6fc0b690191005a49468c296ad49d0caacacf1 (patch) | |
tree | 58025919ba7a72f208e7e5c244a698caebddf9ab /include | |
parent | a0bb50a14216e7be7453abee2e7b5830e2a7c4c1 (diff) | |
download | musl-1e6fc0b690191005a49468c296ad49d0caacacf1.tar.gz musl-1e6fc0b690191005a49468c296ad49d0caacacf1.tar.bz2 musl-1e6fc0b690191005a49468c296ad49d0caacacf1.tar.xz musl-1e6fc0b690191005a49468c296ad49d0caacacf1.zip |
avoid padding gaps in struct sockaddr_storage
compilers are free not to copy, or in some cases to clobber, padding
bytes in a structure. while it's an aliasing violation, and thus
undefined behavior, to copy or manipulate other sockaddr types using
sockaddr_storage, it seems likely that traditional code attempts to do
so, and the original intent of the sockaddr_storage structure was
probably to allow such usage.
in the interest of avoiding silent and potentially dangerous breakage,
ensure that there are no actual padding bytes in sockaddr_storage by
moving and adjusting the size of the __ss_padding member so that it
fits exactly.
this change also removes a silent assumption that the alignment of
long is equal to its size.
Diffstat (limited to 'include')
-rw-r--r-- | include/sys/socket.h | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/include/sys/socket.h b/include/sys/socket.h index 76fbde04..55e53d2a 100644 --- a/include/sys/socket.h +++ b/include/sys/socket.h @@ -306,8 +306,8 @@ struct sockaddr struct sockaddr_storage { sa_family_t ss_family; + char __ss_padding[128-sizeof(long)-sizeof(sa_family_t)]; unsigned long __ss_align; - char __ss_padding[128-2*sizeof(unsigned long)]; }; int socket (int, int, int); |