ENGINE_load_[private|public]_key had error handling that could return
without releasing a lock. This is the same fix as applied to OpenSSL-engine-0_9_6-stable, minus the ENGINE_ctrl() change - the HEAD already had that fixed.
This commit is contained in:
parent
e4dc18d7e5
commit
69443d0da0
@ -230,17 +230,18 @@ EVP_PKEY *ENGINE_load_private_key(ENGINE *e, const char *key_id,
|
|||||||
CRYPTO_w_lock(CRYPTO_LOCK_ENGINE);
|
CRYPTO_w_lock(CRYPTO_LOCK_ENGINE);
|
||||||
if(e->funct_ref == 0)
|
if(e->funct_ref == 0)
|
||||||
{
|
{
|
||||||
|
CRYPTO_w_unlock(CRYPTO_LOCK_ENGINE);
|
||||||
ENGINEerr(ENGINE_F_ENGINE_LOAD_PRIVATE_KEY,
|
ENGINEerr(ENGINE_F_ENGINE_LOAD_PRIVATE_KEY,
|
||||||
ENGINE_R_NOT_INITIALISED);
|
ENGINE_R_NOT_INITIALISED);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
CRYPTO_w_unlock(CRYPTO_LOCK_ENGINE);
|
||||||
if (!e->load_privkey)
|
if (!e->load_privkey)
|
||||||
{
|
{
|
||||||
ENGINEerr(ENGINE_F_ENGINE_LOAD_PRIVATE_KEY,
|
ENGINEerr(ENGINE_F_ENGINE_LOAD_PRIVATE_KEY,
|
||||||
ENGINE_R_NO_LOAD_FUNCTION);
|
ENGINE_R_NO_LOAD_FUNCTION);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
CRYPTO_w_unlock(CRYPTO_LOCK_ENGINE);
|
|
||||||
pkey = e->load_privkey(key_id, passphrase);
|
pkey = e->load_privkey(key_id, passphrase);
|
||||||
if (!pkey)
|
if (!pkey)
|
||||||
{
|
{
|
||||||
@ -265,17 +266,18 @@ EVP_PKEY *ENGINE_load_public_key(ENGINE *e, const char *key_id,
|
|||||||
CRYPTO_w_lock(CRYPTO_LOCK_ENGINE);
|
CRYPTO_w_lock(CRYPTO_LOCK_ENGINE);
|
||||||
if(e->funct_ref == 0)
|
if(e->funct_ref == 0)
|
||||||
{
|
{
|
||||||
|
CRYPTO_w_unlock(CRYPTO_LOCK_ENGINE);
|
||||||
ENGINEerr(ENGINE_F_ENGINE_LOAD_PUBLIC_KEY,
|
ENGINEerr(ENGINE_F_ENGINE_LOAD_PUBLIC_KEY,
|
||||||
ENGINE_R_NOT_INITIALISED);
|
ENGINE_R_NOT_INITIALISED);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
CRYPTO_w_unlock(CRYPTO_LOCK_ENGINE);
|
||||||
if (!e->load_pubkey)
|
if (!e->load_pubkey)
|
||||||
{
|
{
|
||||||
ENGINEerr(ENGINE_F_ENGINE_LOAD_PUBLIC_KEY,
|
ENGINEerr(ENGINE_F_ENGINE_LOAD_PUBLIC_KEY,
|
||||||
ENGINE_R_NO_LOAD_FUNCTION);
|
ENGINE_R_NO_LOAD_FUNCTION);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
CRYPTO_w_unlock(CRYPTO_LOCK_ENGINE);
|
|
||||||
pkey = e->load_pubkey(key_id, passphrase);
|
pkey = e->load_pubkey(key_id, passphrase);
|
||||||
if (!pkey)
|
if (!pkey)
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user