]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Log key calculation overflows
authorMark Andrews <marka@isc.org>
Wed, 26 Jun 2024 04:49:51 +0000 (14:49 +1000)
committerMatthijs Mekking <matthijs@isc.org>
Tue, 30 Jul 2024 08:58:54 +0000 (10:58 +0200)
lib/dns/keymgr.c

index cee11a2db04e45bf5b503ca5b2729abafeb424c2..0d25db5d3f09b5d29ba76e9767713ce29417a87d 100644 (file)
@@ -86,6 +86,16 @@ static const char *keystatetags[NUM_KEYSTATES] = { "DNSKEY", "ZRRSIG", "KRRSIG",
 static const char *keystatestrings[4] = { "HIDDEN", "RUMOURED", "OMNIPRESENT",
                                          "UNRETENTIVE" };
 
+static void
+log_key_overflow(dst_key_t *key, const char *what) {
+       char keystr[DST_KEY_FORMATSIZE];
+       dst_key_format(key, keystr, sizeof(keystr));
+       isc_log_write(dns_lctx, DNS_LOGCATEGORY_DNSSEC, DNS_LOGMODULE_DNSSEC,
+                     ISC_LOG_WARNING,
+                     "keymgr: DNSKEY %s (%s) calculation overflowed", keystr,
+                     what);
+}
+
 /*
  * Print key role.
  *
@@ -299,6 +309,7 @@ keymgr_prepublication_time(dns_dnsseckey_t *key, dns_kasp_t *kasp,
                }
 
                if (ISC_OVERFLOW_ADD(active, klifetime, &retire)) {
+                       log_key_overflow(key->key, "retire");
                        retire = UINT32_MAX;
                }
                dst_key_settime(key->key, DST_TIME_INACTIVE, retire);
@@ -403,6 +414,7 @@ keymgr_key_update_lifetime(dns_dnsseckey_t *key, dns_kasp_t *kasp,
                        uint32_t inactive;
                        (void)dst_key_gettime(key->key, DST_TIME_ACTIVATE, &a);
                        if (ISC_OVERFLOW_ADD(a, lifetime, &inactive)) {
+                               log_key_overflow(key->key, "inactive");
                                inactive = UINT32_MAX;
                        }
                        dst_key_settime(key->key, DST_TIME_INACTIVE, inactive);
@@ -1883,6 +1895,7 @@ keymgr_key_rollover(dns_kasp_key_t *kaspkey, dns_dnsseckey_t *active_key,
                uint32_t inactive;
 
                if (ISC_OVERFLOW_ADD(active, lifetime, &inactive)) {
+                       log_key_overflow(new_key->key, "inactive");
                        inactive = UINT32_MAX;
                }
                dst_key_settime(new_key->key, DST_TIME_INACTIVE, inactive);