summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Hankins <dhankins@isc.org>2007-03-27 03:09:26 +0000
committerDavid Hankins <dhankins@isc.org>2007-03-27 03:09:26 +0000
commit2cb84809bef4ba899900588cbb8fe488542c63e8 (patch)
treed8b6b84f5c09e67103ca9cb8624dd616ec2ab3b0
parente89a9ea35b214ab3256b60fff3d79f48f0586fbd (diff)
downloadisc-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--RELNOTES3
-rw-r--r--minires/res_sendsigned.c10
2 files changed, 11 insertions, 2 deletions
diff --git a/RELNOTES b/RELNOTES
index e02703c5..041853c7 100644
--- a/RELNOTES
+++ b/RELNOTES
@@ -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;