提交 69443d0d 编写于 作者: G Geoff Thorpe

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.
上级 e4dc18d7
...@@ -230,17 +230,18 @@ EVP_PKEY *ENGINE_load_private_key(ENGINE *e, const char *key_id, ...@@ -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, ...@@ -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)
{ {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册