This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
[PATCH] Make padding in struct sockaddr_storage explicit [BZ #20111]
- From: fweimer at redhat dot com (Florian Weimer)
- To: libc-alpha at sourceware dot org
- Date: Thu, 19 May 2016 15:12:38 +0200
- Subject: [PATCH] Make padding in struct sockaddr_storage explicit [BZ #20111]
- Authentication-results: sourceware.org; auth=none
This avoids aliasing issues with GCC 6 in -fno-strict-aliasing
mode. (With implicit padding, not all data is copied.)
2016-05-19 Florian Weimer <fweimer@redhat.com>
[BZ #20111]
* bits/socket.h (struct sockaddr_storage): Avoid implicit padding.
* sysdeps/mach/hurd/bits/socket.h (struct sockaddr_storage):
Likewise.
* sysdeps/unix/sysv/linux/bits/socket.h (struct sockaddr_storage):
Likewise.
diff --git a/bits/socket.h b/bits/socket.h
index ab9f242..b3f2753 100644
--- a/bits/socket.h
+++ b/bits/socket.h
@@ -164,6 +164,7 @@ struct sockaddr
struct sockaddr_storage
{
__SOCKADDR_COMMON (ss_); /* Address family, etc. */
+ char __ss_padding_init[sizeof (__ss_aligntype) - __SOCKADDR_COMMON_SIZE];
__ss_aligntype __ss_align; /* Force desired alignment. */
char __ss_padding[_SS_PADSIZE];
};
diff --git a/sysdeps/mach/hurd/bits/socket.h b/sysdeps/mach/hurd/bits/socket.h
index 02c5dac..8d1c2fd 100644
--- a/sysdeps/mach/hurd/bits/socket.h
+++ b/sysdeps/mach/hurd/bits/socket.h
@@ -168,6 +168,7 @@ struct sockaddr
struct sockaddr_storage
{
__SOCKADDR_COMMON (ss_); /* Address family, etc. */
+ char __ss_padding_init[sizeof (__ss_aligntype) - __SOCKADDR_COMMON_SIZE];
__ss_aligntype __ss_align; /* Force desired alignment. */
char __ss_padding[_SS_PADSIZE];
};
diff --git a/sysdeps/unix/sysv/linux/bits/socket.h b/sysdeps/unix/sysv/linux/bits/socket.h
index 0581c79..448b436 100644
--- a/sysdeps/unix/sysv/linux/bits/socket.h
+++ b/sysdeps/unix/sysv/linux/bits/socket.h
@@ -166,6 +166,7 @@ struct sockaddr
struct sockaddr_storage
{
__SOCKADDR_COMMON (ss_); /* Address family, etc. */
+ char __ss_padding_init[sizeof (__ss_aligntype) - __SOCKADDR_COMMON_SIZE];
__ss_aligntype __ss_align; /* Force desired alignment. */
char __ss_padding[_SS_PADSIZE];
};