struct sockaddr_storage: Rename internal members
Commit Message
In commit 3375cfafa7961c6ae0e509c31c3b3cef9ad1f03d (Make padding in
struct sockaddr_storage explicit), the offsets of the members
changed. Some broken applications use these members to find
the start of the address data in struct sockaddr_in or
struct sockaddr_in6, and the change meant that they silently ended
up with an incorrect offset. Changing the struct member names
triggers a compilation failure, hopefully leading to a complete fix.
2017-09-01 Florian Weimer <fweimer@redhat.com>
* bits/socket.h (struct sockaddr_storage): Rename __ss_padding to
__ss_padding_reserved and __ss_align to __ss_align_reserved.
* sysdeps/mach/hurd/bits/socket.h (struct sockaddr_storage): Likewise.
* sysdeps/unix/sysv/linux/bits/socket.h
(struct sockaddr_storage): Likewise.
* inet/tst-sockaddr.c (do_test): Adjust.
Comments
On 09/01/2017 11:16 AM, Florian Weimer wrote:
> In commit 3375cfafa7961c6ae0e509c31c3b3cef9ad1f03d (Make padding in
> struct sockaddr_storage explicit), the offsets of the members
> changed. Some broken applications use these members to find
> the start of the address data in struct sockaddr_in or
> struct sockaddr_in6, and the change meant that they silently ended
> up with an incorrect offset. Changing the struct member names
> triggers a compilation failure, hopefully leading to a complete fix.
>
> 2017-09-01 Florian Weimer <fweimer@redhat.com>
>
> * bits/socket.h (struct sockaddr_storage): Rename __ss_padding to
> __ss_padding_reserved and __ss_align to __ss_align_reserved.
> * sysdeps/mach/hurd/bits/socket.h (struct sockaddr_storage): Likewise.
> * sysdeps/unix/sysv/linux/bits/socket.h
> (struct sockaddr_storage): Likewise.
> * inet/tst-sockaddr.c (do_test): Adjust.
We've been consistently using __glibc_reserved* prefix for this kind of thing,
but perhaps __glibc_reserved_ss_align and __glibc_reserved_ss_aligntype are
too long?
I like that using __glibc_reserved_* clearly indicates who reserved it, and
that it is reserved like all other instances of __glibc_reserved_* should never
clash with other reserved named in other operating systems.
The patch looks good. I'm just bike shedding on the name.
@@ -164,8 +164,8 @@ struct sockaddr
struct sockaddr_storage
{
__SOCKADDR_COMMON (ss_); /* Address family, etc. */
- char __ss_padding[_SS_PADSIZE];
- __ss_aligntype __ss_align; /* Force desired alignment. */
+ char __ss_padding_reserved[_SS_PADSIZE];
+ __ss_aligntype __ss_align_reserved; /* Force desired alignment. */
};
@@ -69,12 +69,12 @@ do_test (void)
"struct sockaddr_storage size");
/* Check for lack of holes in the struct definition. */
- check (offsetof (struct sockaddr_storage, __ss_padding)
+ check (offsetof (struct sockaddr_storage, __ss_padding_reserved)
== __SOCKADDR_COMMON_SIZE,
"implicit padding before explicit padding");
- check (offsetof (struct sockaddr_storage, __ss_align)
+ check (offsetof (struct sockaddr_storage, __ss_align_reserved)
== __SOCKADDR_COMMON_SIZE
- + sizeof (((struct sockaddr_storage) {}).__ss_padding),
+ + sizeof (((struct sockaddr_storage) {}).__ss_padding_reserved),
"implicit padding before explicit padding");
/* Check for POSIX compatibility requirements between struct
@@ -168,8 +168,8 @@ struct sockaddr
struct sockaddr_storage
{
__SOCKADDR_COMMON (ss_); /* Address family, etc. */
- char __ss_padding[_SS_PADSIZE];
- __ss_aligntype __ss_align; /* Force desired alignment. */
+ char __ss_padding_reserved[_SS_PADSIZE];
+ __ss_aligntype __ss_align_reserved; /* Force desired alignment. */
};
@@ -187,8 +187,8 @@ struct sockaddr
struct sockaddr_storage
{
__SOCKADDR_COMMON (ss_); /* Address family, etc. */
- char __ss_padding[_SS_PADSIZE];
- __ss_aligntype __ss_align; /* Force desired alignment. */
+ char __ss_padding_reserved[_SS_PADSIZE];
+ __ss_aligntype __ss_align_reserved; /* Force desired alignment. */
};