[openssl] master update

Matt Caswell matt at openssl.org
Tue Jan 11 11:07:55 UTC 2022


The branch master has been updated
       via  7ee992a5d931ab5ad9df00d2d8e47e1b7a72d7ac (commit)
      from  fbbe7202eba9fba243c18513f4f0316dafb3496d (commit)


- Log -----------------------------------------------------------------
commit 7ee992a5d931ab5ad9df00d2d8e47e1b7a72d7ac
Author: Matt Caswell <matt at openssl.org>
Date:   Thu Dec 23 13:59:12 2021 +0000

    Statically link the legacy provider to endecode_test
    
    We already statically link libcrypto to endecode_test even in a "shared"
    build. This can cause problems on some platforms with tests that load the
    legacy provider which is dynamically linked to libcrypto. Two versions of
    libcrypto are then linked to the same executable which can lead to crashes.
    
    Fixes #17059
    
    Reviewed-by: Paul Dale <pauli at openssl.org>
    (Merged from https://github.com/openssl/openssl/pull/17345)

-----------------------------------------------------------------------

Summary of changes:
 crypto/build.info    |  4 ++--
 test/build.info      |  8 ++++++++
 test/endecode_test.c | 14 ++++++++++++++
 3 files changed, 24 insertions(+), 2 deletions(-)

diff --git a/crypto/build.info b/crypto/build.info
index efca6cc105..8c7a3a9c22 100644
--- a/crypto/build.info
+++ b/crypto/build.info
@@ -74,8 +74,8 @@ DEFINE[../providers/libfips.a]=$CPUIDDEF
 # already gets everything that the static libcrypto.a has, and doesn't need it
 # added again.
 IF[{- !$disabled{module} && !$disabled{shared} -}]
-  SOURCE[../providers/liblegacy.a]=$CPUID_COMMON
-  DEFINE[../providers/liblegacy.a]=$CPUIDDEF
+  SOURCE[../providers/legacy]=$CPUID_COMMON
+  DEFINE[../providers/legacy]=$CPUIDDEF
 ENDIF
 
 # Implementations are now spread across several libraries, so the CPUID define
diff --git a/test/build.info b/test/build.info
index ec4bd8d5db..188b850beb 100644
--- a/test/build.info
+++ b/test/build.info
@@ -867,6 +867,14 @@ IF[{- !$disabled{tests} -}]
   SOURCE[endecode_test]=endecode_test.c helpers/predefined_dhparams.c
   INCLUDE[endecode_test]=.. ../include ../apps/include
   DEPEND[endecode_test]=../libcrypto.a libtestutil.a
+  IF[{- !$disabled{module} && !$disabled{legacy} -}]
+    DEFINE[endecode_test]=STATIC_LEGACY
+    SOURCE[endecode_test]=../providers/legacyprov.c
+    INCLUDE[endecode_test]=../providers/common/include \
+                           ../providers/implementations/include
+    DEPEND[endecode_test]=../providers/liblegacy.a \
+                          ../providers/libcommon.a
+  ENDIF
 
   IF[{- !$disabled{'deprecated-3.0'} -}]
     PROGRAMS{noinst}=endecoder_legacy_test
diff --git a/test/endecode_test.c b/test/endecode_test.c
index 1698867b40..0c33dff0ee 100644
--- a/test/endecode_test.c
+++ b/test/endecode_test.c
@@ -26,6 +26,10 @@
 #include "helpers/predefined_dhparams.h"
 #include "testutil.h"
 
+#ifdef STATIC_LEGACY
+OSSL_provider_init_fn ossl_legacy_provider_init;
+#endif
+
 /* Extended test macros to allow passing file & line number */
 #define TEST_FL_ptr(a)               test_ptr(file, line, #a, a)
 #define TEST_FL_mem_eq(a, m, b, n)   test_mem_eq(file, line, #a, #b, a, m, b, n)
@@ -1305,6 +1309,16 @@ int setup_tests(void)
             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
+
     /* Separate provider/ctx for generating the test data */
     if (!TEST_ptr(keyctx = OSSL_LIB_CTX_new()))
         return 0;


More information about the openssl-commits mailing list