aboutsummaryrefslogtreecommitdiff
path: root/resolv/nss_dns
diff options
context:
space:
mode:
authorFlorian Weimer <fweimer@redhat.com>2019-05-16 18:26:36 +0200
committerFlorian Weimer <fweimer@redhat.com>2019-05-16 18:27:37 +0200
commit53bc5770aab40e57d95adc3dff771c975b2174e8 (patch)
treed1ff8f183fdc44ef4123814e1d2c16881754c8c9 /resolv/nss_dns
parentec255a97a22c0b46c111ff0f10be2beb9b5d9224 (diff)
downloadglibc-53bc5770aab40e57d95adc3dff771c975b2174e8.tar
glibc-53bc5770aab40e57d95adc3dff771c975b2174e8.tar.gz
glibc-53bc5770aab40e57d95adc3dff771c975b2174e8.tar.bz2
glibc-53bc5770aab40e57d95adc3dff771c975b2174e8.zip
nss_dns: Check for proper A/AAAA address alignment
Diffstat (limited to 'resolv/nss_dns')
-rw-r--r--resolv/nss_dns/dns-host.c11
1 files changed, 9 insertions, 2 deletions
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;