diff options
author | Richard Levitte <levitte@openssl.org> | 2016-09-28 23:39:18 +0200 |
---|---|---|
committer | Richard Levitte <richard@levitte.org> | 2016-10-20 08:59:53 +0200 |
commit | 233bcb95dd7299d98ad235d6ba16c1b5726c9276 (patch) | |
tree | 5d80dd7ea98c25c124516eb43e5428256dd6804c /apps/srp.c | |
parent | e7a5f50da09324aeb77386f30cd1110eb5e917f2 (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)
(cherry picked from commit dd1abd4462e4e4fa84b8f8de2ec70375f9b0e191)
Diffstat (limited to 'apps/srp.c')
-rw-r--r-- | apps/srp.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/apps/srp.c b/apps/srp.c index 69175ebc58..add010037c 100644 --- a/apps/srp.c +++ b/apps/srp.c @@ -209,6 +209,7 @@ OPTIONS srp_options[] = { int srp_main(int argc, char **argv) { + ENGINE *e = NULL; CA_DB *db = NULL; CONF *conf = NULL; int gNindex = -1, maxgN = -1, ret = 1, errors = 0, verbose = 0, i; @@ -269,7 +270,7 @@ int srp_main(int argc, char **argv) passoutarg = opt_arg(); break; case OPT_ENGINE: - (void)setup_engine(opt_arg(), 0); + e = setup_engine(opt_arg(), 0); break; } } @@ -602,6 +603,7 @@ int srp_main(int argc, char **argv) app_RAND_write_file(randfile); NCONF_free(conf); free_index(db); + release_engine(e); return (ret); } #endif |