]> git.ipfire.org Git - thirdparty/openssl.git/commitdiff
QUIC CHANNEL: Fix idle timeout computation bug
authorHugo Landau <hlandau@openssl.org>
Mon, 22 Jan 2024 14:00:05 +0000 (14:00 +0000)
committerHugo Landau <hlandau@openssl.org>
Thu, 8 Feb 2024 16:50:00 +0000 (16:50 +0000)
Reviewed-by: Neil Horman <nhorman@openssl.org>
Reviewed-by: Matt Caswell <matt@openssl.org>
Reviewed-by: Tomas Mraz <tomas@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/23360)

ssl/quic/quic_channel.c

index 48584ffd3a9ce5d12abea09c1255343943a9519c..be36d743992195305d468c05507a72d8888a18bd 100644 (file)
@@ -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;