openssl: Make sure to release the functional ENGINE reference

The functional reference created by ENGINE_init() was never released,
only the structural one created by ENGINE_by_id().  The functional
reference includes an implicit structural reference, which is also
released by ENGINE_finish().

Closes strongswan/strongswan#119.
This commit is contained in:
Tobias Brunner
2018-12-12 12:00:29 +01:00
parent 7cf3f97e56
commit 322daff844
@@ -436,21 +436,21 @@ static private_key_t *openssl_private_key_connect(key_type_t type,
ENGINE_free(engine); ENGINE_free(engine);
return NULL; return NULL;
} }
ENGINE_free(engine);
if (!login(engine, keyid)) if (!login(engine, keyid))
{ {
DBG1(DBG_LIB, "login to engine '%s' failed", engine_id); DBG1(DBG_LIB, "login to engine '%s' failed", engine_id);
ENGINE_free(engine); ENGINE_finish(engine);
return NULL; return NULL;
} }
key = ENGINE_load_private_key(engine, keyname, NULL, NULL); key = ENGINE_load_private_key(engine, keyname, NULL, NULL);
ENGINE_finish(engine);
if (!key) if (!key)
{ {
DBG1(DBG_LIB, "failed to load private key with ID '%s' from " DBG1(DBG_LIB, "failed to load private key with ID '%s' from "
"engine '%s'", keyname, engine_id); "engine '%s'", keyname, engine_id);
ENGINE_free(engine);
return NULL; return NULL;
} }
ENGINE_free(engine);
switch (EVP_PKEY_base_id(key)) switch (EVP_PKEY_base_id(key))
{ {