diff options
author | Richard Levitte <levitte@openssl.org> | 2016-09-28 23:39:18 +0200 |
---|---|---|
committer | Richard Levitte <levitte@openssl.org> | 2016-10-19 17:44:08 +0200 |
commit | dd1abd4462e4e4fa84b8f8de2ec70375f9b0e191 (patch) | |
tree | 66ed9bf5494cf999e57f754b5fa43ccd51ffc36e /apps/rand.c | |
parent | OpenSSL::Test - small fixup (diff) | |
download | openssl-dd1abd4462e4e4fa84b8f8de2ec70375f9b0e191.tar.xz openssl-dd1abd4462e4e4fa84b8f8de2ec70375f9b0e191.zip |
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/rand.c')
-rw-r--r-- | apps/rand.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/apps/rand.c b/apps/rand.c index e6e9e3ead4..33dbf57d9c 100644 --- a/apps/rand.c +++ b/apps/rand.c @@ -39,6 +39,7 @@ const OPTIONS rand_options[] = { int rand_main(int argc, char **argv) { + ENGINE *e = NULL; BIO *out = NULL; char *inrand = NULL, *outfile = NULL, *prog; OPTION_CHOICE o; @@ -60,7 +61,7 @@ int rand_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_RAND: inrand = opt_arg(); @@ -125,6 +126,7 @@ int rand_main(int argc, char **argv) end: if (ret != 0) ERR_print_errors(bio_err); + release_engine(e); BIO_free_all(out); return (ret); } |