about summary refs log tree commit diff
diff options
context:
space:
mode:
authorFlorian Weimer <fweimer@redhat.com>2016-04-11 10:55:43 +0200
committerFlorian Weimer <fweimer@redhat.com>2016-05-09 11:29:20 +0200
commit49203a513f86e5238d43da23505a600bef1a5d7a (patch)
tree78bb37e66d68039c862c12665f49e2585bb1b07b
parent888d9a0146b4b8364e065ab359eae5b3db5badb9 (diff)
downloadglibc-49203a513f86e5238d43da23505a600bef1a5d7a.tar.gz
glibc-49203a513f86e5238d43da23505a600bef1a5d7a.tar.xz
glibc-49203a513f86e5238d43da23505a600bef1a5d7a.zip
nss_dns: Fix assertion failure in _nss_dns_getcanonname_r [BZ #19865]
(cherry picked from commit d29fb41f4431ca35ea360498ef9d37558ce90d76)
-rw-r--r--ChangeLog6
-rw-r--r--resolv/nss_dns/dns-canon.c7
2 files changed, 13 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index 85a0733097..7f4794fc40 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2016-04-11  Florian Weimer  <fweimer@redhat.com>
+
+	[BZ #19865]
+	* resolv/nss_dns/dns-canon.c (_nss_dns_getcanonname_r): Restore
+	original buffer before retry.
+
 2016-04-14  Florian Weimer  <fweimer@redhat.com>
 
 	* malloc/arena.c (__malloc_fork_lock_parent)
diff --git a/resolv/nss_dns/dns-canon.c b/resolv/nss_dns/dns-canon.c
index 27255fda58..fd73f19984 100644
--- a/resolv/nss_dns/dns-canon.c
+++ b/resolv/nss_dns/dns-canon.c
@@ -144,6 +144,13 @@ _nss_dns_getcanonname_r (const char *name, char *buffer, size_t buflen,
 	      ptr += sizeof (uint16_t) + __ns_get16 (ptr);
 	    }
 	}
+
+      /* Restore original buffer before retry.  */
+      if (ansp.ptr != buf)
+	{
+	  free (ansp.ptr);
+	  ansp.ptr = buf;
+	}
     }
 
  out: