summaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
authorNeil Horman <nhorman@openssl.org>2023-11-30 11:20:34 -0500
committerTomas Mraz <tomas@openssl.org>2023-12-06 14:27:42 +0100
commita2b847c52ad35420e8316591a61829a2d3993aec (patch)
treeafecbac29e7dfae247c6624b2ab79161fbcfa3d0 /test
parent604eecffb6703af675d8d9d21948fc3b963a765a (diff)
Statically link legacy provider to evp_extra_test
Like in #17345, evp_extra_test links libcrypto statically, but also has a dynamic/shared load via the legacy provider, which leads to ambiguous behavior in evp_extra_test on some platforms, usually a crash (SIGSEGV) on exit via the atexit handlers. Statically link the legacy provider to avoid this. Fixes #22819 Helped-by: Neil Horman <nhorman@openssl.org> Helped-by: Tomas Mraz <tomas@openssl.org> Signed-off-by: Randall S. Becker <randall.becker@nexbridge.ca> Reviewed-by: Tom Cosgrove <tom.cosgrove@arm.com> Reviewed-by: Tomas Mraz <tomas@openssl.org> (Merged from https://github.com/openssl/openssl/pull/22905) (cherry picked from commit f529a2eb75374946b60ed686ca6f90fdf244e787)
Diffstat (limited to 'test')
-rw-r--r--test/build.info8
-rw-r--r--test/evp_extra_test.c13
2 files changed, 21 insertions, 0 deletions
diff --git a/test/build.info b/test/build.info
index 1bacdcb827..d96edf7d44 100644
--- a/test/build.info
+++ b/test/build.info
@@ -191,6 +191,14 @@ IF[{- !$disabled{tests} -}]
SOURCE[evp_extra_test]=evp_extra_test.c fake_rsaprov.c
INCLUDE[evp_extra_test]=../include ../apps/include
DEPEND[evp_extra_test]=../libcrypto.a libtestutil.a
+ IF[{- !$disabled{module} && !$disabled{legacy} -}]
+ DEFINE[evp_extra_test]=STATIC_LEGACY
+ SOURCE[evp_extra_test]=../providers/legacyprov.c
+ INCLUDE[evp_extra_test]=../providers/common/include \
+ ../providers/implementations/include
+ DEPEND[evp_extra_test]=../providers/liblegacy.a \
+ ../providers/libcommon.a
+ ENDIF
SOURCE[hpke_test]=hpke_test.c
INCLUDE[hpke_test]=../include ../apps/include
diff --git a/test/evp_extra_test.c b/test/evp_extra_test.c
index 4250630327..f3680a0fb4 100644
--- a/test/evp_extra_test.c
+++ b/test/evp_extra_test.c
@@ -38,6 +38,10 @@
#include "crypto/evp.h"
#include "fake_rsaprov.h"
+#ifdef STATIC_LEGACY
+OSSL_provider_init_fn ossl_legacy_provider_init;
+#endif
+
static OSSL_LIB_CTX *testctx = NULL;
static char *testpropq = NULL;
@@ -5437,6 +5441,15 @@ int setup_tests(void)
testctx = OSSL_LIB_CTX_new();
if (!TEST_ptr(testctx))
return 0;
+#ifdef STATIC_LEGACY
+ /*
+ * This test is always statically linked against libcrypto. We must not
+ * attempt to load legacy.so that might be dynamically linked against
+ * libcrypto. Instead we use a built-in version of the legacy provider.
+ */
+ if (!OSSL_PROVIDER_add_builtin(testctx, "legacy", ossl_legacy_provider_init))
+ return 0;
+#endif
/* Swap the libctx to test non-default context only */
nullprov = OSSL_PROVIDER_load(NULL, "null");
deflprov = OSSL_PROVIDER_load(testctx, "default");