author | "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr> |
Sun Sep 12 23:38:18 2010 +0200 (2010-09-12) | |
changeset 2120 | 48de021b3a9e |
parent 1201 | c9967a6e3b25 |
permissions | -rw-r--r-- |
yann@1201 | 1 |
Original patch from: gentoo/src/patchsets/glibc/2.9/0050_all_glibc-_nss_dns_gethostbyaddr2_r-check-and-adjust-the-buffer-alignment.patch |
yann@1201 | 2 |
|
yann@1201 | 3 |
-= BEGIN original header =- |
yann@1201 | 4 |
http://sourceware.org/ml/libc-alpha/2009-01/msg00000.html |
yann@1201 | 5 |
|
yann@1201 | 6 |
From 8ad7030880eaa18dcabf8e284e79026301fd3fa4 Mon Sep 17 00:00:00 2001 |
yann@1201 | 7 |
From: Ulrich Drepper <drepper@redhat.com> |
yann@1201 | 8 |
Date: Thu, 8 Jan 2009 00:02:38 +0000 |
yann@1201 | 9 |
Subject: [PATCH] (_nss_dns_gethostbyaddr2_r): Check and adjust the buffer alignment. |
yann@1201 | 10 |
|
yann@1201 | 11 |
-= END original header =- |
yann@1201 | 12 |
|
yann@1201 | 13 |
diff -durN glibc-2_9.orig/resolv/nss_dns/dns-host.c glibc-2_9/resolv/nss_dns/dns-host.c |
yann@1201 | 14 |
--- glibc-2_9.orig/resolv/nss_dns/dns-host.c 2008-11-12 08:52:20.000000000 +0100 |
yann@1201 | 15 |
+++ glibc-2_9/resolv/nss_dns/dns-host.c 2009-02-02 22:00:36.000000000 +0100 |
yann@1201 | 16 |
@@ -364,6 +364,19 @@ |
yann@1201 | 17 |
int n, status; |
yann@1201 | 18 |
int olderr = errno; |
yann@1201 | 19 |
|
yann@1201 | 20 |
+ uintptr_t pad = -(uintptr_t) buffer % __alignof__ (struct host_data); |
yann@1201 | 21 |
+ buffer += pad; |
yann@1201 | 22 |
+ buflen = buflen > pad ? buflen - pad : 0; |
yann@1201 | 23 |
+ |
yann@1201 | 24 |
+ if (__builtin_expect (buflen < sizeof (struct host_data), 0)) |
yann@1201 | 25 |
+ { |
yann@1201 | 26 |
+ *errnop = ERANGE; |
yann@1201 | 27 |
+ *h_errnop = NETDB_INTERNAL; |
yann@1201 | 28 |
+ return NSS_STATUS_TRYAGAIN; |
yann@1201 | 29 |
+ } |
yann@1201 | 30 |
+ |
yann@1201 | 31 |
+ host_data = (struct host_data *) buffer; |
yann@1201 | 32 |
+ |
yann@1201 | 33 |
if (__res_maybe_init (&_res, 0) == -1) |
yann@1201 | 34 |
return NSS_STATUS_UNAVAIL; |
yann@1201 | 35 |