From: Mukund Sivaraman Date: Fri, 14 Aug 2015 08:24:03 +0000 (+0530) Subject: Fix double frees in getaddrinfo() in libirs (#40209) X-Git-Tag: v9.9.8rc1~42 X-Git-Url: http://git.ipfire.org/gitweb/?a=commitdiff_plain;h=4abc82071465d85ef55f32ee71a28c5bb7b667ac;p=thirdparty%2Fbind9.git Fix double frees in getaddrinfo() in libirs (#40209) (cherry picked from commit d7262e5c8669d318531d47643356d554f7d0e2ee) (cherry picked from commit cec7b9840492f788d1d5dcbfb1d420b0cf2ad4e7) --- diff --git a/CHANGES b/CHANGES index 4daeb043db2..1ad262b89ee 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 95acb296bf6..f61225c11f9 100644 --- a/lib/irs/getaddrinfo.c +++ b/lib/irs/getaddrinfo.c @@ -1138,10 +1138,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; @@ -1261,11 +1259,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);