summaryrefslogtreecommitdiffstats
path: root/providers/implementations/keymgmt
diff options
context:
space:
mode:
authorPeiwei Hu <jlu.hpw@foxmail.com>2022-01-06 09:47:05 +0800
committerPauli <ppzgs1@gmail.com>2022-01-07 21:08:13 +1100
commit22778abad905536fa6c93cdc6fffc8c736dfee79 (patch)
tree15342dee292c381910b38d6074ffe00ddbeb9c92 /providers/implementations/keymgmt
parent6e98b7f153fcf9dfad1053fbb3a592166837c6fc (diff)
providers/implementations/keymgmt/rsa_kmgmt.c: refactor gen_init
There is risk to pass the gctx with NULL value to rsa_gen_set_params which dereference gctx directly. Reviewed-by: Tomas Mraz <tomas@openssl.org> Reviewed-by: Paul Dale <pauli@openssl.org> (Merged from https://github.com/openssl/openssl/pull/17429)
Diffstat (limited to 'providers/implementations/keymgmt')
-rw-r--r--providers/implementations/keymgmt/rsa_kmgmt.c19
1 files changed, 12 insertions, 7 deletions
diff --git a/providers/implementations/keymgmt/rsa_kmgmt.c b/providers/implementations/keymgmt/rsa_kmgmt.c
index b1c3011f14..29e5d10813 100644
--- a/providers/implementations/keymgmt/rsa_kmgmt.c
+++ b/providers/implementations/keymgmt/rsa_kmgmt.c
@@ -454,19 +454,24 @@ static void *gen_init(void *provctx, int selection, int rsa_type,
gctx->libctx = libctx;
if ((gctx->pub_exp = BN_new()) == NULL
|| !BN_set_word(gctx->pub_exp, RSA_F4)) {
- BN_free(gctx->pub_exp);
- OPENSSL_free(gctx);
- return NULL;
+ goto err;
}
gctx->nbits = 2048;
gctx->primes = RSA_DEFAULT_PRIME_NUM;
gctx->rsa_type = rsa_type;
+ } else {
+ goto err;
}
- if (!rsa_gen_set_params(gctx, params)) {
- OPENSSL_free(gctx);
- return NULL;
- }
+
+ if (!rsa_gen_set_params(gctx, params))
+ goto err;
return gctx;
+
+err:
+ if (gctx != NULL)
+ BN_free(gctx->pub_exp);
+ OPENSSL_free(gctx);
+ return NULL;
}
static void *rsa_gen_init(void *provctx, int selection,