mirror of
https://sourceware.org/git/glibc.git
synced 2025-08-07 06:43:00 +03:00
nss_dns: Check for proper A/AAAA address alignment
Reviewed-by: Carlos O'Donell <carlos@redhat.com>
This commit is contained in:
@@ -1,3 +1,8 @@
|
|||||||
|
2019-05-24 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-23 Joseph Myers <joseph@codesourcery.com>
|
2019-05-23 Joseph Myers <joseph@codesourcery.com>
|
||||||
|
|
||||||
* sysdeps/unix/sysv/linux/bits/fcntl-linux.h [__USE_GNU]
|
* sysdeps/unix/sysv/linux/bits/fcntl-linux.h [__USE_GNU]
|
||||||
|
@@ -78,6 +78,7 @@
|
|||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include <libc-pointer-arith.h>
|
||||||
|
|
||||||
#include "nsswitch.h"
|
#include "nsswitch.h"
|
||||||
#include <arpa/nameser.h>
|
#include <arpa/nameser.h>
|
||||||
@@ -947,8 +948,18 @@ getanswer_r (struct resolv_context *ctx,
|
|||||||
linebuflen -= nn;
|
linebuflen -= nn;
|
||||||
}
|
}
|
||||||
|
|
||||||
linebuflen -= sizeof (align) - ((u_long) bp % sizeof (align));
|
/* Provide sufficient alignment for both address
|
||||||
bp += sizeof (align) - ((u_long) bp % sizeof (align));
|
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");
|
||||||
|
{
|
||||||
|
char *new_bp = PTR_ALIGN_UP (bp, align);
|
||||||
|
linebuflen -= new_bp - bp;
|
||||||
|
bp = new_bp;
|
||||||
|
}
|
||||||
|
|
||||||
if (__glibc_unlikely (n > linebuflen))
|
if (__glibc_unlikely (n > linebuflen))
|
||||||
goto too_small;
|
goto too_small;
|
||||||
|
Reference in New Issue
Block a user