diff options
author | David Hankins <dhankins@isc.org> | 2007-03-27 03:09:26 +0000 |
---|---|---|
committer | David Hankins <dhankins@isc.org> | 2007-03-27 03:09:26 +0000 |
commit | 2cb84809bef4ba899900588cbb8fe488542c63e8 (patch) | |
tree | d8b6b84f5c09e67103ca9cb8624dd616ec2ab3b0 | |
parent | e89a9ea35b214ab3256b60fff3d79f48f0586fbd (diff) | |
download | isc-dhcp-2cb84809bef4ba899900588cbb8fe488542c63e8.tar.gz |
- A memory leak in the minires_nsendsigned() function call was repaired.
Effectively, this leaked ~80 bytes per DDNS update. [ISC-Bugs #16770]
-rw-r--r-- | RELNOTES | 3 | ||||
-rw-r--r-- | minires/res_sendsigned.c | 10 |
2 files changed, 11 insertions, 2 deletions
@@ -89,6 +89,9 @@ and for prodding me into improving it. - A reference leak on binding scopes set by ddns updates was repaired. +- A memory leak in the minires_nsendsigned() function call was repaired. + Effectively, this leaked ~80 bytes per DDNS update. + Changes since 3.0.5rc2 - Failover servers try harder to retransmit binding updates upon entering diff --git a/minires/res_sendsigned.c b/minires/res_sendsigned.c index 24045421..b80ffe51 100644 --- a/minires/res_sendsigned.c +++ b/minires/res_sendsigned.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004 by Internet Systems Consortium, Inc. ("ISC") + * Copyright (c) 2004,2007 by Internet Systems Consortium, Inc. ("ISC") * Copyright (c) 1995-2003 by Internet Software Consortium * * Permission to use, copy, modify, and distribute this software for any @@ -67,8 +67,10 @@ res_nsendsigned(res_state statp, bufsize = msglen + 1024; newmsg = (double *) malloc(bufsize); - if (newmsg == NULL) + if (newmsg == NULL) { + free(nstatp); return ISC_R_NOMEMORY; + } memcpy(newmsg, msg, msglen); newmsglen = msglen; @@ -91,6 +93,7 @@ res_nsendsigned(res_state statp, NOERROR, dstkey, NULL, 0, sig, &siglen, 0); if (rcode != ISC_R_SUCCESS) { + dst_free_key(dstkey); free (nstatp); free (newmsg); return rcode; @@ -107,6 +110,7 @@ retry: rcode = res_nsend(nstatp, newmsg, newmsglen, answer, anslen, &ret); if (rcode != ISC_R_SUCCESS) { + dst_free_key(dstkey); free (nstatp); free (newmsg); return rcode; @@ -119,6 +123,7 @@ retry: if (rcode != ISC_R_SUCCESS) { Dprint(nstatp->pfcode & RES_PRF_REPLY, (stdout, ";; TSIG invalid (%s)\n", p_rcode(ret))); + dst_free_key(dstkey); free (nstatp); free (newmsg); return rcode; @@ -132,6 +137,7 @@ retry: goto retry; } + dst_free_key(dstkey); free (nstatp); free (newmsg); *anssize = anslen; |