mirror of git://git.musl-libc.org/musl
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.
This commit is contained in:
parent
a0bb50a142
commit
1e6fc0b690
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue