]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Check for overflow when adding lifetime
authorMark Andrews <marka@isc.org>
Wed, 26 Jun 2024 04:39:04 +0000 (14:39 +1000)
committerMatthijs Mekking <matthijs@isc.org>
Tue, 30 Jul 2024 08:58:54 +0000 (10:58 +0200)
lib/dns/keymgr.c

index 8367b3800308150c25865e67195396bb390b1fe2..cee11a2db04e45bf5b503ca5b2729abafeb424c2 100644 (file)
@@ -298,7 +298,9 @@ keymgr_prepublication_time(dns_dnsseckey_t *key, dns_kasp_t *kasp,
                        return (0);
                }
 
-               retire = active + klifetime;
+               if (ISC_OVERFLOW_ADD(active, klifetime, &retire)) {
+                       retire = UINT32_MAX;
+               }
                dst_key_settime(key->key, DST_TIME_INACTIVE, retire);
        }
 
@@ -398,9 +400,12 @@ keymgr_key_update_lifetime(dns_dnsseckey_t *key, dns_kasp_t *kasp,
                dst_key_setnum(key->key, DST_NUM_LIFETIME, lifetime);
                if (lifetime > 0) {
                        uint32_t a = now;
+                       uint32_t inactive;
                        (void)dst_key_gettime(key->key, DST_TIME_ACTIVATE, &a);
-                       dst_key_settime(key->key, DST_TIME_INACTIVE,
-                                       (a + lifetime));
+                       if (ISC_OVERFLOW_ADD(a, lifetime, &inactive)) {
+                               inactive = UINT32_MAX;
+                       }
+                       dst_key_settime(key->key, DST_TIME_INACTIVE, inactive);
                        keymgr_settime_remove(key, kasp);
                } else {
                        dst_key_unsettime(key->key, DST_TIME_INACTIVE);
@@ -1875,8 +1880,12 @@ keymgr_key_rollover(dns_kasp_key_t *kaspkey, dns_dnsseckey_t *active_key,
 
        /* Do we need to set retire time? */
        if (lifetime > 0) {
-               dst_key_settime(new_key->key, DST_TIME_INACTIVE,
-                               (active + lifetime));
+               uint32_t inactive;
+
+               if (ISC_OVERFLOW_ADD(active, lifetime, &inactive)) {
+                       inactive = UINT32_MAX;
+               }
+               dst_key_settime(new_key->key, DST_TIME_INACTIVE, inactive);
                keymgr_settime_remove(new_key, kasp);
        }