From d7262e5c8669d318531d47643356d554f7d0e2ee Mon Sep 17 00:00:00 2001 From: Mukund Sivaraman Date: Fri, 14 Aug 2015 13:54:03 +0530 Subject: [PATCH] Fix double frees in getaddrinfo() in libirs (#40209) --- CHANGES | 3 +++ lib/irs/getaddrinfo.c | 9 ++------- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/CHANGES b/CHANGES index ba1d2dbaf8..97e08a4718 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,6 @@ +4179. [bug] Fix double frees in getaddrinfo() in libirs. + [RT #40209] + 4178. [bug] Fix assertion failure in parsing UNSPEC(103) RR from text. [RT #40274] diff --git a/lib/irs/getaddrinfo.c b/lib/irs/getaddrinfo.c index 4f25781701..e61602eb3e 100644 --- a/lib/irs/getaddrinfo.c +++ b/lib/irs/getaddrinfo.c @@ -1139,10 +1139,8 @@ add_ipv4(const char *hostname, int flags, struct addrinfo **aip, UNUSED(flags); ai = ai_clone(*aip, AF_INET); /* don't use ai_clone() */ - if (ai == NULL) { - _freeaddrinfo(*aip); + if (ai == NULL) return (EAI_MEMORY); - } *aip = ai; ai->ai_socktype = socktype; @@ -1262,11 +1260,8 @@ ai_clone(struct addrinfo *oai, int family) { ai = ai_alloc(family, ((family == AF_INET6) ? sizeof(struct sockaddr_in6) : sizeof(struct sockaddr_in))); - if (ai == NULL) { - if (oai != NULL) - freeaddrinfo(oai); + if (ai == NULL) return (NULL); - } if (oai == NULL) return (ai);