From 5ec4d4e8461a47cd7e69bb7529d7bd12329d7b93 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Luk=C3=A1=C5=A1=20Ondr=C3=A1=C4=8Dek?= Date: Thu, 12 Dec 2024 15:39:06 +0100 Subject: [PATCH] daemon/defer: fix price overflow for too long operations --- daemon/defer.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/daemon/defer.c b/daemon/defer.c index fabc76c83..0734fd0e4 100644 --- a/daemon/defer.c +++ b/daemon/defer.c @@ -223,14 +223,15 @@ void defer_charge(uint64_t nsec, union kr_sockaddr *addr, bool stream) _Alignas(16) uint8_t key[16] = {0, }; uint16_t max_load = 0; uint8_t prefix = 0; - kru_price_t base_price = BASE_PRICE(nsec); + uint64_t base_price = BASE_PRICE(nsec); if (addr->ip.sa_family == AF_INET6) { memcpy(key, &addr->ip6.sin6_addr, 16); kru_price_t prices[V6_PREFIXES_CNT]; for (size_t i = 0; i < V6_PREFIXES_CNT; i++) { - prices[i] = base_price / V6_RATE_MULT[i]; + uint64_t price = base_price / V6_RATE_MULT[i]; + prices[i] = price > (kru_price_t)-1 ? -1 : price; } max_load = KRU.load_multi_prefix_max((struct kru *)defer->kru, kr_now(), @@ -240,7 +241,8 @@ void defer_charge(uint64_t nsec, union kr_sockaddr *addr, bool stream) kru_price_t prices[V4_PREFIXES_CNT]; for (size_t i = 0; i < V4_PREFIXES_CNT; i++) { - prices[i] = base_price / V4_RATE_MULT[i]; + uint64_t price = base_price / V4_RATE_MULT[i]; + prices[i] = price > (kru_price_t)-1 ? -1 : price; } max_load = KRU.load_multi_prefix_max((struct kru *)defer->kru, kr_now(), -- 2.47.2