]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
dnssec-cds failed to cleanup on non error paths
authorMark Andrews <marka@isc.org>
Mon, 30 Jan 2023 02:44:47 +0000 (13:44 +1100)
committerMark Andrews <marka@isc.org>
Wed, 8 Feb 2023 21:29:43 +0000 (08:29 +1100)
dnssec-cds failed to cleanup on non error paths which meant that
the OpenSSL libraries could not cleanup properly.

bin/dnssec/dnssec-cds.c

index 86271fcbc028504865fea542f18b37223ad9cd8d..73a5c1c62531ef6e62cdd8053c8ef26ae827451b 100644 (file)
@@ -125,10 +125,14 @@ typedef isc_result_t
 ds_maker_func_t(isc_buffer_t *buf, dns_rdata_t *ds, dns_dsdigest_t dt,
                dns_rdata_t *crdata);
 
-static dns_rdataset_t cdnskey_set, cdnskey_sig;
-static dns_rdataset_t cds_set, cds_sig;
-static dns_rdataset_t dnskey_set, dnskey_sig;
-static dns_rdataset_t old_ds_set, new_ds_set;
+static dns_rdataset_t cdnskey_set = DNS_RDATASET_INIT;
+static dns_rdataset_t cdnskey_sig = DNS_RDATASET_INIT;
+static dns_rdataset_t cds_set = DNS_RDATASET_INIT;
+static dns_rdataset_t cds_sig = DNS_RDATASET_INIT;
+static dns_rdataset_t dnskey_set = DNS_RDATASET_INIT;
+static dns_rdataset_t dnskey_sig = DNS_RDATASET_INIT;
+static dns_rdataset_t old_ds_set = DNS_RDATASET_INIT;
+static dns_rdataset_t new_ds_set = DNS_RDATASET_INIT;
 
 static keyinfo_t *old_key_tbl, *new_key_tbl;
 
@@ -1242,7 +1246,7 @@ main(int argc, char *argv[]) {
                vbprintf(1, "%s has neither CDS nor CDNSKEY records\n",
                         namestr);
                write_parent_set(ds_path, inplace, nsupdate, &old_ds_set);
-               exit(0);
+               goto cleanup;
        }
 
        /*
@@ -1308,6 +1312,7 @@ main(int argc, char *argv[]) {
 
        write_parent_set(ds_path, inplace, nsupdate, &new_ds_set);
 
+cleanup:
        free_all_sets();
        cleanup_logging(&lctx);
        dst_lib_destroy();