This is an automated email from the git hooks/post-receive script. aurel32 pushed a commit to branch sid in repository glibc.
commit 7234ed60f8ecb6aa922699e69aabbc3817652553 Author: Aurelien Jarno <aurel...@aurel32.net> Date: Mon Mar 28 22:50:19 2016 +0200 Update from upstream stable branch: * Update from upstream stable branch: - Fix assertion failure with unconnectable name server addresses. Closes: #816669. --- debian/changelog | 3 + debian/patches/git-updates.diff | 205 ++++++++++++++++++++++++++++++++++++---- 2 files changed, 190 insertions(+), 18 deletions(-) diff --git a/debian/changelog b/debian/changelog index 5300c36..c51d480 100644 --- a/debian/changelog +++ b/debian/changelog @@ -4,6 +4,9 @@ glibc (2.22-5) UNRELEASED; urgency=medium * testsuite-xfail-debian.mk: Disable the problematic test-lfs test on hurd. [ Aurelien Jarno ] + * Update from upstream stable branch: + - Fix assertion failure with unconnectable name server addresses. Closes: + #816669. * Drop libnss-dns-udeb and libnss-files-udeb and merge the files they include in libc6-udeb. diff --git a/debian/patches/git-updates.diff b/debian/patches/git-updates.diff index 6882c1c..abb6fd9 100644 --- a/debian/patches/git-updates.diff +++ b/debian/patches/git-updates.diff @@ -1,10 +1,25 @@ GIT update of git://sourceware.org/git/glibc.git/release/2.22/master from glibc-2.22 diff --git a/ChangeLog b/ChangeLog -index cb9124e..ba4a3f2 100644 +index cb9124e..3e0d69b 100644 --- a/ChangeLog +++ b/ChangeLog -@@ -1,3 +1,385 @@ +@@ -1,3 +1,400 @@ ++2016-03-25 Florian Weimer <fwei...@redhat.com> ++ ++ [BZ #19791] ++ * resolv/res_send.c (close_and_return_error): New function. ++ (send_dg): Initialize *resplen2 after reopen failure. Call ++ close_and_return_error for error returns. On error paths without ++ __res_iclose, initialze *resplen2 explicitly. Update comment for ++ successful return. ++ ++2016-03-21 Dylan Alex Simon <dylan-sourcew...@dylex.net> ++ ++ [BZ #19822] ++ * math/Makefile ($(inst_libdir)/libm.so): Write output to $@.tmp and ++ move it to the final $@ location. ++ +2016-03-15 Andreas Schwab <sch...@suse.de> + + [BZ #19257] @@ -391,7 +406,7 @@ index cb9124e..ba4a3f2 100644 * version.h (RELEASE): Set to "stable". diff --git a/NEWS b/NEWS -index 4c31de7..93c46af 100644 +index 4c31de7..a3dd3c7 100644 --- a/NEWS +++ b/NEWS @@ -5,6 +5,31 @@ See the end for copying conditions. @@ -418,7 +433,7 @@ index 4c31de7..93c46af 100644 + + 17905, 18420, 18421, 18480, 18589, 18743, 18778, 18781, 18787, 18796, + 18870, 18887, 18921, 18928, 18969, 18985, 19003, 19018, 19058, 19174, -+ 19178, 19590, 19682. ++ 19178, 19590, 19682, 19791, 19822. + +* The LD_POINTER_GUARD environment variable can no longer be used to + disable the pointer guard feature. It is always enabled. @@ -1370,18 +1385,21 @@ index a39a94f..dc0fe30 100644 obstack_free (&weightpool, NULL); diff --git a/math/Makefile b/math/Makefile -index 6388bae..2c9d72d 100644 +index 6388bae..84b4ded 100644 --- a/math/Makefile +++ b/math/Makefile -@@ -98,7 +98,7 @@ $(inst_libdir)/libm.so: $(common-objpfx)format.lds \ +@@ -98,8 +98,9 @@ $(inst_libdir)/libm.so: $(common-objpfx)format.lds \ (echo '/* GNU ld script'; echo '*/';\ cat $<; \ echo 'GROUP ( $(slibdir)/libm.so$(libm.so-version) ' \ - 'AS_NEEDED ( $(slibdir)/libmvec.so$(libmvec.so-version) ) )' \ +- ) > $@ + 'AS_NEEDED ( $(libdir)/libmvec_nonshared.a $(slibdir)/libmvec.so$(libmvec.so-version) ) )' \ - ) > $@ ++ ) > $@.new ++ mv -f $@.new $@ endif + # Rules for the test suite. diff --git a/misc/Makefile b/misc/Makefile index aecb0da..12055ce 100644 --- a/misc/Makefile @@ -1938,7 +1956,7 @@ index 4a9b3b3..95470a9 100644 } if (saved_herrno != -1) diff --git a/resolv/res_send.c b/resolv/res_send.c -index 5e53cc2..6511bb1 100644 +index 5e53cc2..0add3d2 100644 --- a/resolv/res_send.c +++ b/resolv/res_send.c @@ -1,3 +1,20 @@ @@ -1971,10 +1989,22 @@ index 5e53cc2..6511bb1 100644 u_char *buf = malloc (MAXPACKET); if (buf == NULL) return (-1); -@@ -638,6 +657,77 @@ get_nsaddr (res_state statp, int n) +@@ -638,6 +657,89 @@ get_nsaddr (res_state statp, int n) return (struct sockaddr *) (void *) &statp->nsaddr_list[n]; } ++/* Close the resolver structure, assign zero to *RESPLEN2 if RESPLEN2 ++ is not NULL, and return zero. */ ++static int ++__attribute__ ((warn_unused_result)) ++close_and_return_error (res_state statp, int *resplen2) ++{ ++ __res_iclose(statp, false); ++ if (resplen2 != NULL) ++ *resplen2 = 0; ++ return 0; ++} ++ +/* The send_vc function is responsible for sending a DNS query over TCP + to the nameserver numbered NS from the res_state STATP i.e. + EXT(statp).nssocks[ns]. The function supports sending both IPv4 and @@ -2049,7 +2079,7 @@ index 5e53cc2..6511bb1 100644 static int send_vc(res_state statp, const u_char *buf, int buflen, const u_char *buf2, int buflen2, -@@ -647,11 +737,7 @@ send_vc(res_state statp, +@@ -647,11 +749,7 @@ send_vc(res_state statp, { const HEADER *hp = (HEADER *) buf; const HEADER *hp2 = (HEADER *) buf2; @@ -2062,7 +2092,7 @@ index 5e53cc2..6511bb1 100644 struct sockaddr *nsap = get_nsaddr (statp, ns); int truncating, connreset, n; /* On some architectures compiler might emit a warning indicating -@@ -743,6 +829,8 @@ send_vc(res_state statp, +@@ -743,6 +841,8 @@ send_vc(res_state statp, * Receive length & response */ int recvresp1 = 0; @@ -2071,7 +2101,7 @@ index 5e53cc2..6511bb1 100644 int recvresp2 = buf2 == NULL; uint16_t rlen16; read_len: -@@ -779,40 +867,14 @@ send_vc(res_state statp, +@@ -779,40 +879,14 @@ send_vc(res_state statp, u_char **thisansp; int *thisresplenp; if ((recvresp1 | recvresp2) == 0 || buf2 == NULL) { @@ -2115,7 +2145,7 @@ index 5e53cc2..6511bb1 100644 thisanssizp = anssizp2; thisansp = ansp2; thisresplenp = resplen2; -@@ -820,10 +882,14 @@ send_vc(res_state statp, +@@ -820,10 +894,14 @@ send_vc(res_state statp, anhp = (HEADER *) *thisansp; *thisresplenp = rlen; @@ -2134,7 +2164,7 @@ index 5e53cc2..6511bb1 100644 u_char *newp = malloc (MAXPACKET); if (newp == NULL) { *terrno = ENOMEM; -@@ -835,6 +901,9 @@ send_vc(res_state statp, +@@ -835,6 +913,9 @@ send_vc(res_state statp, if (thisansp == ansp2) *ansp2_malloced = 1; anhp = (HEADER *) newp; @@ -2144,7 +2174,7 @@ index 5e53cc2..6511bb1 100644 len = rlen; } else { Dprint(statp->options & RES_DEBUG, -@@ -997,6 +1066,66 @@ reopen (res_state statp, int *terrno, int ns) +@@ -997,6 +1078,66 @@ reopen (res_state statp, int *terrno, int ns) return 1; } @@ -2211,7 +2241,7 @@ index 5e53cc2..6511bb1 100644 static int send_dg(res_state statp, const u_char *buf, int buflen, const u_char *buf2, int buflen2, -@@ -1006,8 +1135,6 @@ send_dg(res_state statp, +@@ -1006,8 +1147,6 @@ send_dg(res_state statp, { const HEADER *hp = (HEADER *) buf; const HEADER *hp2 = (HEADER *) buf2; @@ -2220,7 +2250,20 @@ index 5e53cc2..6511bb1 100644 struct timespec now, timeout, finish; struct pollfd pfd[1]; int ptimeout; -@@ -1040,6 +1167,8 @@ send_dg(res_state statp, +@@ -1032,7 +1171,11 @@ send_dg(res_state statp, + retry_reopen: + retval = reopen (statp, terrno, ns); + if (retval <= 0) +- return retval; ++ { ++ if (resplen2 != NULL) ++ *resplen2 = 0; ++ return retval; ++ } + retry: + evNowTime(&now); + evConsTime(&timeout, seconds, 0); +@@ -1040,11 +1183,11 @@ send_dg(res_state statp, int need_recompute = 0; int nwritten = 0; int recvresp1 = 0; @@ -2229,7 +2272,52 @@ index 5e53cc2..6511bb1 100644 int recvresp2 = buf2 == NULL; pfd[0].fd = EXT(statp).nssocks[ns]; pfd[0].events = POLLOUT; -@@ -1203,55 +1332,56 @@ send_dg(res_state statp, +- if (resplen2 != NULL) +- *resplen2 = 0; + wait: + if (need_recompute) { + recompute_resend: +@@ -1052,9 +1195,7 @@ send_dg(res_state statp, + if (evCmpTime(finish, now) <= 0) { + poll_err_out: + Perror(statp, stderr, "poll", errno); +- err_out: +- __res_iclose(statp, false); +- return (0); ++ return close_and_return_error (statp, resplen2); + } + evSubTime(&timeout, &finish, &now); + need_recompute = 0; +@@ -1101,7 +1242,9 @@ send_dg(res_state statp, + } + + *gotsomewhere = 1; +- return (0); ++ if (resplen2 != NULL) ++ *resplen2 = 0; ++ return 0; + } + if (n < 0) { + if (errno == EINTR) +@@ -1169,7 +1312,7 @@ send_dg(res_state statp, + + fail_sendmmsg: + Perror(statp, stderr, "sendmmsg", errno); +- goto err_out; ++ return close_and_return_error (statp, resplen2); + } + } + else +@@ -1187,7 +1330,7 @@ send_dg(res_state statp, + if (errno == EINTR || errno == EAGAIN) + goto recompute_resend; + Perror(statp, stderr, "send", errno); +- goto err_out; ++ return close_and_return_error (statp, resplen2); + } + just_one: + if (nwritten != 0 || buf2 == NULL || single_request) +@@ -1203,55 +1346,56 @@ send_dg(res_state statp, int *thisresplenp; if ((recvresp1 | recvresp2) == 0 || buf2 == NULL) { @@ -2313,6 +2401,87 @@ index 5e53cc2..6511bb1 100644 HEADER *anhp = (HEADER *) *thisansp; socklen_t fromlen = sizeof(struct sockaddr_in6); assert (sizeof(from) <= fromlen); +@@ -1264,7 +1408,7 @@ send_dg(res_state statp, + goto wait; + } + Perror(statp, stderr, "recvfrom", errno); +- goto err_out; ++ return close_and_return_error (statp, resplen2); + } + *gotsomewhere = 1; + if (__glibc_unlikely (*thisresplenp < HFIXEDSZ)) { +@@ -1275,7 +1419,7 @@ send_dg(res_state statp, + (stdout, ";; undersized: %d\n", + *thisresplenp)); + *terrno = EMSGSIZE; +- goto err_out; ++ return close_and_return_error (statp, resplen2); + } + if ((recvresp1 || hp->id != anhp->id) + && (recvresp2 || hp2->id != anhp->id)) { +@@ -1324,7 +1468,7 @@ send_dg(res_state statp, + ? *thisanssizp : *thisresplenp); + /* record the error */ + statp->_flags |= RES_F_EDNS0ERR; +- goto err_out; ++ return close_and_return_error (statp, resplen2); + } + #endif + if (!(statp->options & RES_INSECURE2) +@@ -1376,10 +1520,10 @@ send_dg(res_state statp, + goto wait; + } + +- __res_iclose(statp, false); + /* don't retry if called from dig */ + if (!statp->pfcode) +- return (0); ++ return close_and_return_error (statp, resplen2); ++ __res_iclose(statp, false); + } + if (anhp->rcode == NOERROR && anhp->ancount == 0 + && anhp->aa == 0 && anhp->ra == 0 && anhp->arcount == 0) { +@@ -1401,6 +1545,8 @@ send_dg(res_state statp, + __res_iclose(statp, false); + // XXX if we have received one reply we could + // XXX use it and not repeat it over TCP... ++ if (resplen2 != NULL) ++ *resplen2 = 0; + return (1); + } + /* Mark which reply we received. */ +@@ -1416,21 +1562,22 @@ send_dg(res_state statp, + __res_iclose (statp, false); + retval = reopen (statp, terrno, ns); + if (retval <= 0) +- return retval; ++ { ++ if (resplen2 != NULL) ++ *resplen2 = 0; ++ return retval; ++ } + pfd[0].fd = EXT(statp).nssocks[ns]; + } + } + goto wait; + } +- /* +- * All is well, or the error is fatal. Signal that the +- * next nameserver ought not be tried. +- */ ++ /* All is well. We have received both responses (if ++ two responses were requested). */ + return (resplen); +- } else if (pfd[0].revents & (POLLERR | POLLHUP | POLLNVAL)) { +- /* Something went wrong. We can stop trying. */ +- goto err_out; +- } ++ } else if (pfd[0].revents & (POLLERR | POLLHUP | POLLNVAL)) ++ /* Something went wrong. We can stop trying. */ ++ return close_and_return_error (statp, resplen2); + else { + /* poll should not have returned > 0 in this case. */ + abort (); diff --git a/scripts/test-installation.pl b/scripts/test-installation.pl index cac1562..79b2b3e 100755 --- a/scripts/test-installation.pl -- Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-glibc/glibc.git