]> git.ipfire.org Git - thirdparty/rspamd.git/commitdiff
[Fix] Use ev_now() instead of rspamd_get_ticks() for dynamic ban expiry
authorVsevolod Stakhov <vsevolod@rspamd.com>
Thu, 2 Apr 2026 15:54:37 +0000 (16:54 +0100)
committerVsevolod Stakhov <vsevolod@rspamd.com>
Thu, 2 Apr 2026 15:54:37 +0000 (16:54 +0100)
rspamd_get_ticks(FALSE) returns CLOCK_MONOTONIC (seconds since boot),
while rspamd_util.get_time() in Lua returns ev_time() (wall-clock unix
epoch). Using mismatched clocks made expire_ts comparisons nonsensical.

Switch to ev_now(ctx->event_loop) which matches the ev_time() epoch used
by Lua callers of block_fuzzy_client.

src/libserver/fuzzy_storage_ratelimit.c

index 0f4f496a24825f31b63d4f0e13e39f8bd89300dd..d74450377827b414722e5a441e2ccf1e04138194 100644 (file)
@@ -413,7 +413,8 @@ rspamd_fuzzy_check_client(struct rspamd_fuzzy_storage_ctx *ctx,
 
                if (val != RADIX_NO_VALUE) {
                        struct rspamd_fuzzy_dynamic_ban *ban = (struct rspamd_fuzzy_dynamic_ban *) val;
-                       double now = rspamd_get_ticks(FALSE);
+                       /* Use ev_now() — same wall-clock epoch as rspamd_util.get_time() in Lua */
+                       double now = ev_now(ctx->event_loop);
 
                        if (ban->expire_ts == 0.0 || ban->expire_ts > now) {
                                rspamd_fuzzy_maybe_call_blacklisted(ctx, addr, "dynamic_blocked");