From d7e3ef70b601831d5bef3fef21fa16b761f561e8 Mon Sep 17 00:00:00 2001 From: Dimitri Staessens Date: Tue, 7 Nov 2023 18:14:11 +0100 Subject: lib: Fix timeout overflow on 32-bit systems The timeout comparison for keepalives could overflow on 32-bit systems, as times were converted to nanoseconds and be limited to a bit over 4 seconds. This caused flow reads to fail miserably with EFLOWPEER errors when keepalives were set higher on these systems. Signed-off-by: Dimitri Staessens Signed-off-by: Sander Vrijders --- src/lib/dev.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/lib/dev.c b/src/lib/dev.c index 55fc3575..8e9a2e7e 100644 --- a/src/lib/dev.c +++ b/src/lib/dev.c @@ -315,13 +315,13 @@ static void _flow_keepalive(struct flow * flow) clock_gettime(PTHREAD_COND_CLOCK, &now); - if (ts_diff_ns(&r_act, &now) > timeo * MILLION) { + if (ts_diff_ns(&r_act, &now) > (int64_t) timeo * MILLION) { shm_rbuff_set_acl(flow->rx_rb, ACL_FLOWPEER); shm_flow_set_notify(ai.fqset, flow_id, FLOW_PEER); return; } - if (ts_diff_ns(&s_act, &now) > (timeo * MILLION) >> 2) { + if (ts_diff_ns(&s_act, &now) > (int64_t) timeo * (MILLION >> 2)) { pthread_rwlock_unlock(&ai.lock); flow_send_keepalive(flow, now); -- cgit v1.2.3