diff options
author | Peiwei Hu <jlu.hpw@foxmail.com> | 2022-01-06 09:47:05 +0800 |
---|---|---|
committer | Pauli <ppzgs1@gmail.com> | 2022-01-07 21:08:56 +1100 |
commit | e33f05660447c69e89f2e9f5d3140a56322411d5 (patch) | |
tree | 025d36af0e3c12c3fba4082b93097f2e72cad26f | |
parent | 277a8334cd4a213619fe92107dd393eab6d8a801 (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)
(cherry picked from commit 22778abad905536fa6c93cdc6fffc8c736dfee79)
-rw-r--r-- | providers/implementations/keymgmt/rsa_kmgmt.c | 19 |
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, |