]> git.ipfire.org Git - thirdparty/openssl.git/commitdiff
Correct order of ossl_condvar_signal in quic_multistream_test
authorNeil Horman <nhorman@openssl.org>
Fri, 3 Nov 2023 16:12:38 +0000 (12:12 -0400)
committerTomas Mraz <tomas@openssl.org>
Wed, 8 Nov 2023 14:55:40 +0000 (15:55 +0100)
quic_multistream test was issuing a signal on a condvar after dropping
the corresponding mutex, not before, leading to potential race
conditions in the reading of the associated data

Fixes #22588

Reviewed-by: Hugo Landau <hlandau@openssl.org>
Reviewed-by: Paul Dale <pauli@openssl.org>
Reviewed-by: Matt Caswell <matt@openssl.org>
Reviewed-by: Tomas Mraz <tomas@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/22616)

test/quic_multistream_test.c

index 8d513d7f08031bb035a1bcb16ce98561abab3b18..22a753ad673b309b5fd6daea2e7d809481597759 100644 (file)
@@ -497,8 +497,8 @@ static int join_server_thread(struct helper *h)
 
     ossl_crypto_mutex_lock(h->server_thread.m);
     h->server_thread.stop = 1;
-    ossl_crypto_mutex_unlock(h->server_thread.m);
     ossl_crypto_condvar_signal(h->server_thread.c);
+    ossl_crypto_mutex_unlock(h->server_thread.m);
 
     ossl_crypto_thread_native_join(h->server_thread.t, &rv);
     ossl_crypto_thread_native_clean(h->server_thread.t);
@@ -1079,8 +1079,8 @@ static int run_script_worker(struct helper *h, const struct script_op *script,
             else if (h->blocking && !h->server_thread.ready) {
                 ossl_crypto_mutex_lock(h->server_thread.m);
                 h->server_thread.ready = 1;
-                ossl_crypto_mutex_unlock(h->server_thread.m);
                 ossl_crypto_condvar_signal(h->server_thread.c);
+                ossl_crypto_mutex_unlock(h->server_thread.m);
             }
             if (h->blocking)
                 assert(h->s == NULL);
@@ -2658,8 +2658,8 @@ static int script_20_trigger(struct helper *h, volatile uint64_t *counter)
 #if defined(OPENSSL_THREADS)
     ossl_crypto_mutex_lock(h->misc_m);
     ++*counter;
-    ossl_crypto_mutex_unlock(h->misc_m);
     ossl_crypto_condvar_broadcast(h->misc_cv);
+    ossl_crypto_mutex_unlock(h->misc_m);
 #endif
     return 1;
 }