aboutsummaryrefslogtreecommitdiffstats
path: root/crypto/rsa/rsa_eng.c
diff options
context:
space:
mode:
Diffstat (limited to 'crypto/rsa/rsa_eng.c')
-rw-r--r--crypto/rsa/rsa_eng.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/crypto/rsa/rsa_eng.c b/crypto/rsa/rsa_eng.c
index 383a7045b2b2..2f21ddbe74c5 100644
--- a/crypto/rsa/rsa_eng.c
+++ b/crypto/rsa/rsa_eng.c
@@ -207,8 +207,17 @@ RSA *RSA_new_method(ENGINE *engine)
ret->blinding=NULL;
ret->mt_blinding=NULL;
ret->bignum_data=NULL;
- ret->flags=ret->meth->flags;
- CRYPTO_new_ex_data(CRYPTO_EX_INDEX_RSA, ret, &ret->ex_data);
+ ret->flags=ret->meth->flags & ~RSA_FLAG_NON_FIPS_ALLOW;
+ if (!CRYPTO_new_ex_data(CRYPTO_EX_INDEX_RSA, ret, &ret->ex_data))
+ {
+#ifndef OPENSSL_NO_ENGINE
+ if (ret->engine)
+ ENGINE_finish(ret->engine);
+#endif
+ OPENSSL_free(ret);
+ return(NULL);
+ }
+
if ((ret->meth->init != NULL) && !ret->meth->init(ret))
{
#ifndef OPENSSL_NO_ENGINE