2
0
mirror of https://gitlab.isc.org/isc-projects/bind9 synced 2025-09-03 16:15:27 +00:00

2599. [bug] Address rapid memory growth when validation fails.

[RT #19654]
This commit is contained in:
Mark Andrews
2009-05-11 02:22:03 +00:00
parent 4bb70681e0
commit 4c2ed3d141
2 changed files with 47 additions and 44 deletions

View File

@@ -1,3 +1,6 @@
2599. [bug] Address rapid memory growth when validation fails.
[RT #19654]
2598. [func] Reserve the -F flag. [RT #19657] 2598. [func] Reserve the -F flag. [RT #19657]
2597. [bug] Handle a validation failure with a insecure delegation 2597. [bug] Handle a validation failure with a insecure delegation

View File

@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE. * PERFORMANCE OF THIS SOFTWARE.
*/ */
/* $Id: resolver.c,v 1.395 2009/05/07 09:41:22 fdupont Exp $ */ /* $Id: resolver.c,v 1.396 2009/05/11 02:22:03 marka Exp $ */
/*! \file */ /*! \file */
@@ -4224,32 +4224,34 @@ cache_name(fetchctx_t *fctx, dns_name_t *name, dns_adbaddrinfo_t *addrinfo,
rdataset->trust = dns_trust_pending; rdataset->trust = dns_trust_pending;
if (sigrdataset != NULL) if (sigrdataset != NULL)
sigrdataset->trust = dns_trust_pending; sigrdataset->trust = dns_trust_pending;
if (!need_validation) if (!need_validation || !ANSWER(rdataset)) {
addedrdataset = ardataset; addedrdataset = ardataset;
else result = dns_db_addrdataset(fctx->cache, node,
addedrdataset = NULL; NULL, now, rdataset,
result = dns_db_addrdataset(fctx->cache, node, NULL, 0, addedrdataset);
now, rdataset, 0,
addedrdataset);
if (result == DNS_R_UNCHANGED) { if (result == DNS_R_UNCHANGED) {
result = ISC_R_SUCCESS; result = ISC_R_SUCCESS;
if (!need_validation && if (!need_validation &&
ardataset != NULL && ardataset != NULL &&
ardataset->type == 0) { ardataset->type == 0) {
/* /*
* The answer in the cache is better * The answer in the cache isi
* than the answer we found, and is * better than the answer we
* a negative cache entry, so we * found, and is a negative
* must set eresult appropriately. * cache entry, so we must set
* eresult appropriately.
*/ */
if (NXDOMAIN(ardataset)) if (NXDOMAIN(ardataset))
eresult = DNS_R_NCACHENXDOMAIN; eresult =
DNS_R_NCACHENXDOMAIN;
else else
eresult = DNS_R_NCACHENXRRSET; eresult =
DNS_R_NCACHENXRRSET;
/* /*
* We have a negative response from * We have a negative response
* the cache so don't attempt to * from the cache so don't
* add the RRSIG rrset. * attempt to add the RRSIG
* rrset.
*/ */
continue; continue;
} }
@@ -4257,10 +4259,7 @@ cache_name(fetchctx_t *fctx, dns_name_t *name, dns_adbaddrinfo_t *addrinfo,
if (result != ISC_R_SUCCESS) if (result != ISC_R_SUCCESS)
break; break;
if (sigrdataset != NULL) { if (sigrdataset != NULL) {
if (!need_validation)
addedrdataset = asigrdataset; addedrdataset = asigrdataset;
else
addedrdataset = NULL;
result = dns_db_addrdataset(fctx->cache, result = dns_db_addrdataset(fctx->cache,
node, NULL, now, node, NULL, now,
sigrdataset, 0, sigrdataset, 0,
@@ -4271,6 +4270,7 @@ cache_name(fetchctx_t *fctx, dns_name_t *name, dns_adbaddrinfo_t *addrinfo,
break; break;
} else if (!ANSWER(rdataset)) } else if (!ANSWER(rdataset))
continue; continue;
}
if (ANSWER(rdataset) && need_validation) { if (ANSWER(rdataset) && need_validation) {
if (fctx->type != dns_rdatatype_any && if (fctx->type != dns_rdatatype_any &&