From: Neil Horman Date: Fri, 3 Nov 2023 16:12:38 +0000 (-0400) Subject: Correct order of ossl_condvar_signal in quic_multistream_test X-Git-Tag: openssl-3.3.0-alpha1~651 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=22b482a8b6f0c0e422c9b926c26d906ac6909106;p=thirdparty%2Fopenssl.git Correct order of ossl_condvar_signal in quic_multistream_test 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 Reviewed-by: Paul Dale Reviewed-by: Matt Caswell Reviewed-by: Tomas Mraz (Merged from https://github.com/openssl/openssl/pull/22616) --- diff --git a/test/quic_multistream_test.c b/test/quic_multistream_test.c index 8d513d7f080..22a753ad673 100644 --- a/test/quic_multistream_test.c +++ b/test/quic_multistream_test.c @@ -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; }