]> git.ipfire.org Git - thirdparty/openssl.git/commitdiff
Statically link legacy provider to evp_extra_test
authorNeil Horman <nhorman@openssl.org>
Thu, 30 Nov 2023 16:20:34 +0000 (11:20 -0500)
committerTomas Mraz <tomas@openssl.org>
Wed, 6 Dec 2023 16:02:58 +0000 (17:02 +0100)
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/22904)

(cherry picked from commit 426d34fc1302eb0d2f5a6152621c105ea2d198b6)

test/build.info
test/evp_extra_test.c

index 9bed40eeb1dc0e93362ae78368cf26c2c3a073dd..82740dcb6e4aa9430d990cc11de62b4e9a18e380 100644 (file)
@@ -172,6 +172,14 @@ IF[{- !$disabled{tests} -}]
   SOURCE[evp_extra_test]=evp_extra_test.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[evp_extra_test2]=evp_extra_test2.c
   INCLUDE[evp_extra_test2]=../include ../apps/include
index e8700ca8d11790e3a17097df9959fc3ae680a65b..72892261bd24cea0ece4e7c5d4d44c69afb4ea19 100644 (file)
 #include "internal/sizes.h"
 #include "crypto/evp.h"
 
+#ifdef STATIC_LEGACY
+OSSL_provider_init_fn ossl_legacy_provider_init;
+#endif
+
 static OSSL_LIB_CTX *testctx = NULL;
 static char *testpropq = NULL;
 
@@ -5237,6 +5241,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");