summaryrefslogtreecommitdiffstats
path: root/crypto/init.c
diff options
context:
space:
mode:
authorTomas Mraz <tomas@openssl.org>2021-06-02 15:15:45 +0200
committerTomas Mraz <tomas@openssl.org>2021-06-03 17:42:21 +0200
commit7d69c07ddf7a27bf4dca250c8a37b8f929d33100 (patch)
tree8b75b5d50acb80011e951db37af83182d401379d /crypto/init.c
parenteffb0dcf864110a4595f1a243adb9c1dd09eb516 (diff)
OPENSSL_init_crypto must return 0 when cleanup was done
Fixes #15581 Reviewed-by: Matt Caswell <matt@openssl.org> Reviewed-by: Paul Dale <pauli@openssl.org> (Merged from https://github.com/openssl/openssl/pull/15589)
Diffstat (limited to 'crypto/init.c')
-rw-r--r--crypto/init.c17
1 files changed, 8 insertions, 9 deletions
diff --git a/crypto/init.c b/crypto/init.c
index 49d817c089..552a4fa66c 100644
--- a/crypto/init.c
+++ b/crypto/init.c
@@ -454,6 +454,13 @@ int OPENSSL_init_crypto(uint64_t opts, const OPENSSL_INIT_SETTINGS *settings)
uint64_t tmp;
int aloaddone = 0;
+ /* Applications depend on 0 being returned when cleanup was already done */
+ if (stopped) {
+ if (!(opts & OPENSSL_INIT_BASE_ONLY))
+ ERR_raise(ERR_LIB_CRYPTO, ERR_R_INIT_FAIL);
+ return 0;
+ }
+
/*
* We ignore failures from this function. It is probably because we are
* on a platform that doesn't support lockless atomic loads (we may not
@@ -476,15 +483,7 @@ int OPENSSL_init_crypto(uint64_t opts, const OPENSSL_INIT_SETTINGS *settings)
/*
* At some point we should look at this function with a view to moving
* most/all of this into OSSL_LIB_CTX.
- */
-
- if (stopped) {
- if (!(opts & OPENSSL_INIT_BASE_ONLY))
- ERR_raise(ERR_LIB_CRYPTO, ERR_R_INIT_FAIL);
- return 0;
- }
-
- /*
+ *
* When the caller specifies OPENSSL_INIT_BASE_ONLY, that should be the
* *only* option specified. With that option we return immediately after
* doing the requested limited initialization. Note that