]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Disassociate added rdataset on error in cache_rrset()
authorOndřej Surý <ondrej@isc.org>
Mon, 18 Aug 2025 15:11:03 +0000 (17:11 +0200)
committerOndřej Surý <ondrej@isc.org>
Mon, 18 Aug 2025 15:11:03 +0000 (17:11 +0200)
When first dns_db_addrdataset() succeeds in cache_rrset(), but the
second one fails with error, the added rdataset was kept associated.
This caused assertion failure down the pipe in fctx_sendevents().

lib/dns/resolver.c

index 970e6f1708f2ac0fa2bd842addb61bd43db67963..f3cadf3a6f0808f7caaabf5a03dd9fc346f9ffd1 100644 (file)
@@ -5286,6 +5286,9 @@ cache_rrset(fetchctx_t *fctx, isc_stdtime_t now, dns_name_t *name,
        if (result == ISC_R_SUCCESS && sigrdataset != NULL) {
                result = dns_db_addrdataset(fctx->cache, node, NULL, now,
                                            sigrdataset, options, addedsig);
+               if (result != ISC_R_SUCCESS && result != DNS_R_UNCHANGED) {
+                       dns__rdataset_disassociate(added);
+               }
        }
 
        if (result == DNS_R_UNCHANGED) {