summaryrefslogtreecommitdiffstats
path: root/apps/ecparam.c
diff options
context:
space:
mode:
authorRichard Levitte <levitte@openssl.org>2016-09-28 23:39:18 +0200
committerRichard Levitte <levitte@openssl.org>2016-10-19 17:44:08 +0200
commitdd1abd4462e4e4fa84b8f8de2ec70375f9b0e191 (patch)
tree66ed9bf5494cf999e57f754b5fa43ccd51ffc36e /apps/ecparam.c
parente972273194303e15f8dd7ce69dbcfa27cc024e9f (diff)
If an engine comes up explicitely, it must also come down explicitely
In apps/apps.c, one can set up an engine with setup_engine(). However, we freed the structural reference immediately, which means that for engines that don't already have a structural reference somewhere else (because it's a built in engine), we end up returning an invalid reference. Instead, the function release_engine() is added, and called at the end of the routines that call setup_engine(). Reviewed-by: Rich Salz <rsalz@openssl.org> (Merged from https://github.com/openssl/openssl/pull/1643)
Diffstat (limited to 'apps/ecparam.c')
-rw-r--r--apps/ecparam.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/apps/ecparam.c b/apps/ecparam.c
index d1dcf1d75e..7d4cef1006 100644
--- a/apps/ecparam.c
+++ b/apps/ecparam.c
@@ -87,6 +87,7 @@ static OPT_PAIR encodings[] = {
int ecparam_main(int argc, char **argv)
{
+ ENGINE *e = NULL;
BIGNUM *ec_gen = NULL, *ec_order = NULL, *ec_cofactor = NULL;
BIGNUM *ec_p = NULL, *ec_a = NULL, *ec_b = NULL;
BIO *in = NULL, *out = NULL;
@@ -168,7 +169,7 @@ int ecparam_main(int argc, char **argv)
need_rand = 1;
break;
case OPT_ENGINE:
- (void)setup_engine(opt_arg(), 0);
+ e = setup_engine(opt_arg(), 0);
break;
}
}
@@ -454,9 +455,10 @@ int ecparam_main(int argc, char **argv)
BN_free(ec_order);
BN_free(ec_cofactor);
OPENSSL_free(buffer);
+ EC_GROUP_free(group);
+ release_engine(e);
BIO_free(in);
BIO_free_all(out);
- EC_GROUP_free(group);
return (ret);
}