This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
[PATCH] struct sockaddr_storage: Rename internal members
- From: fweimer at redhat dot com (Florian Weimer)
- To: libc-alpha at sourceware dot org
- Date: Fri, 01 Sep 2017 18:16:51 +0200
- Subject: [PATCH] struct sockaddr_storage: Rename internal members
- Authentication-results: sourceware.org; auth=none
- Authentication-results: ext-mx04.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com
- Authentication-results: ext-mx04.extmail.prod.ext.phx2.redhat.com; spf=fail smtp.mailfrom=fweimer at redhat dot com
- Dmarc-filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 127F580460
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.
diff --git a/bits/socket.h b/bits/socket.h
index b527f9c129..ad3c4c870f 100644
--- a/bits/socket.h
+++ b/bits/socket.h
@@ -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. */
};
diff --git a/inet/tst-sockaddr.c b/inet/tst-sockaddr.c
index dccc3dac0c..bf585fbfa3 100644
--- a/inet/tst-sockaddr.c
+++ b/inet/tst-sockaddr.c
@@ -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
diff --git a/sysdeps/mach/hurd/bits/socket.h b/sysdeps/mach/hurd/bits/socket.h
index 6eb09a0ab3..6e5bde458a 100644
--- a/sysdeps/mach/hurd/bits/socket.h
+++ b/sysdeps/mach/hurd/bits/socket.h
@@ -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. */
};
diff --git a/sysdeps/unix/sysv/linux/bits/socket.h b/sysdeps/unix/sysv/linux/bits/socket.h
index ec2bf8564f..b3ee8a82a0 100644
--- a/sysdeps/unix/sysv/linux/bits/socket.h
+++ b/sysdeps/unix/sysv/linux/bits/socket.h
@@ -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. */
};