From 411d2914ade28174f3789d4a8e43636fc68eb310 Mon Sep 17 00:00:00 2001 From: Mark Andrews Date: Wed, 30 Nov 2011 00:48:51 +0000 Subject: [PATCH] 3226. [bug] Address minor resource leakages. [RT #26624] --- CHANGES | 2 ++ bin/dig/dighost.c | 4 ++-- bin/dnssec/dnssec-keyfromlabel.c | 11 +++++++++-- bin/dnssec/dnssec-keygen.c | 11 +++++++++-- bin/tests/dst/gsstest.c | 19 +++++++++---------- bin/tests/system/dlzexternal/driver.c | 24 ++++++++++++++++-------- contrib/nslint-2.1a3/nslint.c | 3 ++- contrib/sdb/ldap/zone2ldap.c | 2 ++ 8 files changed, 51 insertions(+), 25 deletions(-) diff --git a/CHANGES b/CHANGES index e21134250f..9c74fa47de 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,5 @@ +3226. [bug] Address minor resource leakages. [RT #26624] + 3225. [bug] Silence spurious "setsockopt(517, IPV6_V6ONLY) failed" messages. [RT #26507] diff --git a/bin/dig/dighost.c b/bin/dig/dighost.c index 62f2af263e..4892603d9b 100644 --- a/bin/dig/dighost.c +++ b/bin/dig/dighost.c @@ -15,7 +15,7 @@ * PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: dighost.c,v 1.342 2011/11/06 23:18:07 marka Exp $ */ +/* $Id: dighost.c,v 1.343 2011/11/30 00:48:51 marka Exp $ */ /*! \file * \note @@ -4212,7 +4212,6 @@ opentmpkey(isc_mem_t *mctx, const char *file, char **tempp, FILE **fp) { return (result); } - isc_result_t get_trusted_key(isc_mem_t *mctx) { @@ -4274,6 +4273,7 @@ get_trusted_key(isc_mem_t *mctx) if (key != NULL) dst_key_free(&key); } + fclose(fp); return (ISC_R_SUCCESS); } diff --git a/bin/dnssec/dnssec-keyfromlabel.c b/bin/dnssec/dnssec-keyfromlabel.c index 51eac501aa..f5560173cc 100644 --- a/bin/dnssec/dnssec-keyfromlabel.c +++ b/bin/dnssec/dnssec-keyfromlabel.c @@ -14,7 +14,7 @@ * PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: dnssec-keyfromlabel.c,v 1.37 2011/10/20 21:20:01 marka Exp $ */ +/* $Id: dnssec-keyfromlabel.c,v 1.38 2011/11/30 00:48:51 marka Exp $ */ /*! \file */ @@ -111,7 +111,8 @@ usage(void) { int main(int argc, char **argv) { - char *algname = NULL, *nametype = NULL, *type = NULL; + char *algname = NULL, *freeit = NULL; + char *nametype = NULL, *type = NULL; const char *directory = NULL; #ifdef USE_PKCS11 const char *engine = "pkcs11"; @@ -351,6 +352,9 @@ main(int argc, char **argv) { algname = strdup(DEFAULT_NSEC3_ALGORITHM); else algname = strdup(DEFAULT_ALGORITHM); + if (algname == NULL) + fatal("strdup failed"); + freeit = algname; if (verbose > 0) fprintf(stderr, "no algorithm specified; " "defaulting to %s\n", algname); @@ -572,5 +576,8 @@ main(int argc, char **argv) { isc_mem_free(mctx, label); isc_mem_destroy(&mctx); + if (freeit != NULL) + free(freeit); + return (0); } diff --git a/bin/dnssec/dnssec-keygen.c b/bin/dnssec/dnssec-keygen.c index 1f39d2181b..b59047e3f2 100644 --- a/bin/dnssec/dnssec-keygen.c +++ b/bin/dnssec/dnssec-keygen.c @@ -29,7 +29,7 @@ * IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: dnssec-keygen.c,v 1.119 2011/10/20 21:20:01 marka Exp $ */ +/* $Id: dnssec-keygen.c,v 1.120 2011/11/30 00:48:51 marka Exp $ */ /*! \file */ @@ -197,7 +197,8 @@ progress(int p) int main(int argc, char **argv) { - char *algname = NULL, *nametype = NULL, *type = NULL; + char *algname = NULL, *freeit = NULL; + char *nametype = NULL, *type = NULL; char *classname = NULL; char *endp; dst_key_t *key = NULL; @@ -517,6 +518,9 @@ main(int argc, char **argv) { algname = strdup(DEFAULT_NSEC3_ALGORITHM); else algname = strdup(DEFAULT_ALGORITHM); + if (algname == NULL) + fatal("strdup failed"); + freeit = algname; if (verbose > 0) fprintf(stderr, "no algorithm specified; " "defaulting to %s\n", algname); @@ -1031,5 +1035,8 @@ main(int argc, char **argv) { isc_mem_stats(mctx, stdout); isc_mem_destroy(&mctx); + if (freeit != NULL) + free(freeit); + return (0); } diff --git a/bin/tests/dst/gsstest.c b/bin/tests/dst/gsstest.c index bb31d5d1c6..c1296f7a13 100755 --- a/bin/tests/dst/gsstest.c +++ b/bin/tests/dst/gsstest.c @@ -14,7 +14,7 @@ * PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: gsstest.c,v 1.18 2011/09/05 17:39:37 each Exp $ */ +/* $Id: gsstest.c,v 1.19 2011/11/30 00:48:51 marka Exp $ */ #include @@ -135,7 +135,7 @@ static void recvresponse(isc_task_t *task, isc_event_t *event) { dns_requestevent_t *reqev = (dns_requestevent_t *)event; isc_result_t result, result2; - dns_message_t *query, *response = NULL; + dns_message_t *query = NULL, *response = NULL; isc_buffer_t outtoken; isc_buffer_t outbuf; char output[10 * 1024]; @@ -172,14 +172,14 @@ recvresponse(isc_task_t *task, isc_event_t *event) { CHECK("dns_request_getresponse", result2); - if (response) + if (response != NULL) dns_message_destroy(&response); end: - if (query) + if (query != NULL) dns_message_destroy(&query); - if (reqev->request) + if (reqev->request != NULL) dns_request_destroy(&reqev->request); isc_event_free(&event); @@ -272,7 +272,7 @@ static void initctx2(isc_task_t *task, isc_event_t *event) { dns_requestevent_t *reqev = (dns_requestevent_t *)event; isc_result_t result; - dns_message_t *query, *response = NULL; + dns_message_t *query = NULL, *response = NULL; isc_buffer_t outtoken; unsigned char array[DNS_NAME_MAXTEXT + 1]; dns_rdataset_t *rdataset; @@ -331,14 +331,13 @@ initctx2(isc_task_t *task, isc_event_t *event) { tsigkey = NULL; } - if (response) - dns_message_destroy(&response); + dns_message_destroy(&response); end: - if (query) + if (query != NULL) dns_message_destroy(&query); - if (reqev->request) + if (reqev->request != NULL) dns_request_destroy(&reqev->request); isc_event_free(&event); diff --git a/bin/tests/system/dlzexternal/driver.c b/bin/tests/system/dlzexternal/driver.c index b0eb8c22bd..bbc9b5fe21 100644 --- a/bin/tests/system/dlzexternal/driver.c +++ b/bin/tests/system/dlzexternal/driver.c @@ -14,7 +14,7 @@ * PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: driver.c,v 1.8 2011/10/11 13:36:12 marka Exp $ */ +/* $Id: driver.c,v 1.9 2011/11/30 00:48:51 marka Exp $ */ /* * This provides a very simple example of an external loadable DLZ @@ -236,6 +236,7 @@ dlz_create(const char *dlzname, unsigned int argc, char *argv[], if (argc < 2) { state->log(ISC_LOG_ERROR, "dlz_example: please specify a zone name"); + dlz_destroy(state); return (ISC_R_FAILURE); } @@ -521,13 +522,16 @@ static isc_result_t modrdataset(struct dlz_example_data *state, const char *name, const char *rdatastr, struct record *list) { - char *full_name, *dclass, *type, *data, *ttlstr; - char *buf = strdup(rdatastr); + char *full_name, *dclass, *type, *data, *ttlstr, *buf; isc_result_t result; #if defined(WIN32) || defined(_REENTRANT) char *saveptr = NULL; #endif + buf = strdup(rdatastr); + if (buf == NULL) + return (ISC_R_FAILURE); + /* * The format is: * FULLNAME\tTTL\tDCLASS\tTYPE\tDATA @@ -538,28 +542,32 @@ modrdataset(struct dlz_example_data *state, const char *name, full_name = STRTOK_R(buf, "\t", &saveptr); if (full_name == NULL) - return (ISC_R_FAILURE); + goto error; ttlstr = STRTOK_R(NULL, "\t", &saveptr); if (ttlstr == NULL) - return (ISC_R_FAILURE); + goto error; dclass = STRTOK_R(NULL, "\t", &saveptr); if (dclass == NULL) - return (ISC_R_FAILURE); + goto error; type = STRTOK_R(NULL, "\t", &saveptr); if (type == NULL) - return (ISC_R_FAILURE); + goto error; data = STRTOK_R(NULL, "\t", &saveptr); if (data == NULL) - return (ISC_R_FAILURE); + goto error; result = add_name(state, list, name, type, strtoul(ttlstr, NULL, 10), data); free(buf); return (result); + + error: + free(buf); + return (ISC_R_FAILURE); } diff --git a/contrib/nslint-2.1a3/nslint.c b/contrib/nslint-2.1a3/nslint.c index 8ce95050e4..4d9eeb8e1e 100644 --- a/contrib/nslint-2.1a3/nslint.c +++ b/contrib/nslint-2.1a3/nslint.c @@ -23,7 +23,7 @@ static const char copyright[] = "@(#) Copyright (c) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001\n\ The Regents of the University of California. All rights reserved.\n"; static const char rcsid[] = - "@(#) $Id: nslint.c,v 1.1 2001/12/21 04:12:04 marka Exp $ (LBL)"; + "@(#) $Id: nslint.c,v 1.2 2011/11/30 00:48:51 marka Exp $ (LBL)"; #endif /* * nslint - perform consistency checks on dns files @@ -1059,6 +1059,7 @@ process(register const char *file, register const char *domain, ++errors; fprintf(stderr, "%s: %s/%s:%d bad in-addr.arpa domain\n", prog, cwd, file, n); + fclose(f); return; } diff --git a/contrib/sdb/ldap/zone2ldap.c b/contrib/sdb/ldap/zone2ldap.c index e06f4f9578..6db7f85a46 100644 --- a/contrib/sdb/ldap/zone2ldap.c +++ b/contrib/sdb/ldap/zone2ldap.c @@ -328,6 +328,8 @@ main (int *argc, char **argv) isc_hash_destroy(); isc_entropy_detach(&ectx); isc_mem_destroy(&mctx); + if (zonefile) + free(zonefile); return 0; }