From: Tomas Mraz Date: Thu, 10 Oct 2024 20:10:54 +0000 (+0200) Subject: Add test for releasing a shared EVP_PKEY across threads X-Git-Tag: openssl-3.3.3~81 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=23338d1c7ff1634a118a0ad685dc352e045cd89d;p=thirdparty%2Fopenssl.git Add test for releasing a shared EVP_PKEY across threads Reviewed-by: Neil Horman Reviewed-by: Richard Levitte (Merged from https://github.com/openssl/openssl/pull/25664) (cherry picked from commit 420d5d6294449527f4dd986b4fed8681bd4ae8fb) --- diff --git a/test/threadstest.c b/test/threadstest.c index 489acb99e31..9302fed1d68 100644 --- a/test/threadstest.c +++ b/test/threadstest.c @@ -968,6 +968,45 @@ static int test_multi_shared_pkey(void) return test_multi_shared_pkey_common(&thread_shared_evp_pkey); } +static void thread_release_shared_pkey(void) +{ + OSSL_sleep(0); + EVP_PKEY_free(shared_evp_pkey); +} + +static int test_multi_shared_pkey_release(void) +{ + int testresult = 0; + size_t i = 1; + + multi_intialise(); + shared_evp_pkey = NULL; + if (!thread_setup_libctx(1, do_fips ? fips_and_default_providers + : default_provider) + || !TEST_ptr(shared_evp_pkey = load_pkey_pem(privkey, multi_libctx))) + goto err; + for (; i < 10; ++i) { + if (!TEST_true(EVP_PKEY_up_ref(shared_evp_pkey))) + goto err; + } + + if (!start_threads(10, &thread_release_shared_pkey)) + goto err; + i = 0; + + if (!teardown_threads() + || !TEST_true(multi_success)) + goto err; + testresult = 1; + err: + while (i > 0) { + EVP_PKEY_free(shared_evp_pkey); + --i; + } + thead_teardown_libctx(); + return testresult; +} + static int test_multi_load_unload_provider(void) { EVP_MD *sha256 = NULL; @@ -1273,6 +1312,7 @@ int setup_tests(void) #ifndef OPENSSL_NO_DEPRECATED_3_0 ADD_TEST(test_multi_downgrade_shared_pkey); #endif + ADD_TEST(test_multi_shared_pkey_release); ADD_TEST(test_multi_load_unload_provider); ADD_TEST(test_obj_add); ADD_TEST(test_lib_ctx_load_config);