From: Dave Hart Date: Mon, 18 Apr 2011 22:32:32 +0000 (+0000) Subject: [Bug 1851] freeaddrinfo() called after getaddrinfo() fails. X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=0bc8c1e429e97cabc29de34147b3cfadf75ee99a;p=thirdparty%2Fntp.git [Bug 1851] freeaddrinfo() called after getaddrinfo() fails. bk: 4dacbc00SXCVV2zrSrfO-iPQZawQ0A --- diff --git a/ChangeLog b/ChangeLog index ed2f7cc806..e1726d6548 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,4 @@ +* [Bug 1851] freeaddrinfo() called after getaddrinfo() fails. (4.2.7p155) 2011/04/18 Released by Harlan Stenn * Fix leak in refclock_datum.c start failure path. (4.2.7p154) 2011/04/17 Released by Harlan Stenn diff --git a/libntp/ntp_intres.c b/libntp/ntp_intres.c index 8ecb4870b3..b3d0359bf0 100644 --- a/libntp/ntp_intres.c +++ b/libntp/ntp_intres.c @@ -358,7 +358,7 @@ blocking_getaddrinfo( #endif canons_octets = 0; - if (!gai_resp->retcode) { + if (0 == gai_resp->retcode) { ai = ai_res; while (NULL != ai) { gai_resp->ai_count++; @@ -400,7 +400,7 @@ blocking_getaddrinfo( cp = (void *)(gai_resp + 1); canons_octets = 0; - if (!gai_resp->retcode) { + if (0 == gai_resp->retcode) { ai = ai_res; while (NULL != ai) { memcpy(cp, ai, sizeof(*ai)); @@ -437,6 +437,7 @@ blocking_getaddrinfo( ai = ai->ai_next; } + freeaddrinfo(ai_res); } /* @@ -505,7 +506,7 @@ getaddrinfo_sometime_complete( /* * exponential backoff of DNS retries to 64s */ - if (gai_req->retry && again) { + if (gai_req->retry > 0 && again) { /* log the first retry only */ if (INITIAL_DNS_RETRY == gai_req->retry) NLOG(NLOG_SYSINFO) { @@ -745,7 +746,7 @@ blocking_getnameinfo( gni_resp->gni_errno = errno; #endif - if (gni_resp->retcode) { + if (0 != gni_resp->retcode) { gni_resp->hostoctets = 0; gni_resp->servoctets = 0; } else { @@ -780,7 +781,7 @@ blocking_getnameinfo( /* cp serves as our current pointer while serializing */ cp = (void *)(gni_resp + 1); - if (!gni_resp->retcode) { + if (0 == gni_resp->retcode) { memcpy(cp, host, gni_resp->hostoctets); cp += gni_resp->hostoctets; memcpy(cp, service, gni_resp->servoctets); @@ -840,12 +841,12 @@ getnameinfo_sometime_complete( /* * exponential backoff of DNS retries to 64s */ - if (gni_req->retry) + if (gni_req->retry > 0) manage_dns_retry_interval(&gni_req->scheduled, &gni_req->earliest, &gni_req->retry, &child_ctx->next_dns_timeslot); - if (gni_req->retry && again) { + if (gni_req->retry > 0 && again) { if (!queue_blocking_request( BLOCKING_GETNAMEINFO, gni_req,