From 693d9afef46dbde2f41464052bda994821f536ad Mon Sep 17 00:00:00 2001 From: Hugo Landau Date: Mon, 22 Jan 2024 14:00:05 +0000 Subject: [PATCH] QUIC CHANNEL: Fix idle timeout computation bug Reviewed-by: Neil Horman Reviewed-by: Matt Caswell Reviewed-by: Tomas Mraz (Merged from https://github.com/openssl/openssl/pull/23360) --- ssl/quic/quic_channel.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/ssl/quic/quic_channel.c b/ssl/quic/quic_channel.c index 48584ffd3a..be36d74399 100644 --- a/ssl/quic/quic_channel.c +++ b/ssl/quic/quic_channel.c @@ -1135,6 +1135,16 @@ static void do_update(QUIC_STREAM *s, void *arg) ossl_quic_stream_map_update_state(&ch->qsm, s); } +static uint64_t min_u64_ignore_0(uint64_t a, uint64_t b) +{ + if (a == 0) + return b; + if (b == 0) + return a; + + return a < b ? a : b; +} + static int ch_on_transport_params(const unsigned char *params, size_t params_len, void *arg) @@ -1426,8 +1436,9 @@ static int ch_on_transport_params(const unsigned char *params, ch->max_idle_timeout_remote_req = v; - if (v > 0 && v < ch->max_idle_timeout) - ch->max_idle_timeout = v; + ch->max_idle_timeout = min_u64_ignore_0(ch->max_idle_timeout_local_req, + ch->max_idle_timeout_remote_req); + ch_update_idle(ch); got_max_idle_timeout = 1;