diff options
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | resolv/nss_dns/dns-host.c | 11 |
2 files changed, 14 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog index cb020262d9..b98bdc4664 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,10 @@ 2019-05-16 Florian Weimer <fweimer@redhat.com> + * resolv/nss_dns/dns-host.c (getanswer_r): Be more explicit about + struct in_addr/struct in6_addr alignment. + +2019-05-16 Florian Weimer <fweimer@redhat.com> + * nis/nss_nis/nis-hosts.c (EXTRA_ARGS, EXTRA_ARGS_DECL): Remove flags argument. (LINE_PARSER): Do not map IPv4 addresses. diff --git a/resolv/nss_dns/dns-host.c b/resolv/nss_dns/dns-host.c index 9c15f25f28..9c40051aff 100644 --- a/resolv/nss_dns/dns-host.c +++ b/resolv/nss_dns/dns-host.c @@ -947,8 +947,15 @@ getanswer_r (struct resolv_context *ctx, linebuflen -= nn; } - linebuflen -= sizeof (align) - ((u_long) bp % sizeof (align)); - bp += sizeof (align) - ((u_long) bp % sizeof (align)); + /* Provide sufficient alignment for both address + families. */ + enum { align = 4 }; + _Static_assert ((align % __alignof__ (struct in_addr)) == 0, + "struct in_addr alignment"); + _Static_assert ((align % __alignof__ (struct in6_addr)) == 0, + "struct in6_addr alignment"); + linebuflen -= align - ((u_long) bp % align); + bp += align - ((u_long) bp % align); if (__glibc_unlikely (n > linebuflen)) goto too_small; |