From dd1abd4462e4e4fa84b8f8de2ec70375f9b0e191 Mon Sep 17 00:00:00 2001 From: Richard Levitte Date: Wed, 28 Sep 2016 23:39:18 +0200 Subject: 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 (Merged from https://github.com/openssl/openssl/pull/1643) --- apps/dhparam.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'apps/dhparam.c') diff --git a/apps/dhparam.c b/apps/dhparam.c index 302be2dd57..5fca25e17a 100644 --- a/apps/dhparam.c +++ b/apps/dhparam.c @@ -70,6 +70,7 @@ int dhparam_main(int argc, char **argv) BIO *in = NULL, *out = NULL; DH *dh = NULL; char *infile = NULL, *outfile = NULL, *prog, *inrand = NULL; + ENGINE *e = NULL; #ifndef OPENSSL_NO_DSA int dsaparam = 0; #endif @@ -104,7 +105,7 @@ int dhparam_main(int argc, char **argv) outfile = opt_arg(); break; case OPT_ENGINE: - (void)setup_engine(opt_arg(), 0); + e = setup_engine(opt_arg(), 0); break; case OPT_CHECK: check = 1; @@ -356,6 +357,7 @@ int dhparam_main(int argc, char **argv) BIO_free(in); BIO_free_all(out); DH_free(dh); + release_engine(e); return (ret); } -- cgit v1.2.3