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:
@@ -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))
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user