mirror of https://github.com/openssl/openssl.git
Fix missing unlock in decoder_pkey.c
We hit an assertion failure during a call to CRYPTO_THREAD_read_lock during memfail testing. This was caused by us attempting to take a read lock in the same thread that already held the same lock for writing resulting in an EBUSY return. This occured because we triggered a memory failure path in DECODER_new_for_pkey, which never unlocked a write lock we were holding. Fix it by ensuring the lock is released in the error path. Reviewed-by: Tomas Mraz <tomas@openssl.org> Reviewed-by: Saša Nedvědický <sashan@openssl.org> (Merged from https://github.com/openssl/openssl/pull/28216)
This commit is contained in:
parent
7d78cd722b
commit
c0527256d2
|
@ -928,6 +928,7 @@ OSSL_DECODER_CTX_new_for_pkey(EVP_PKEY **pkey,
|
||||||
(void)lh_DECODER_CACHE_ENTRY_insert(cache->hashtable, newcache);
|
(void)lh_DECODER_CACHE_ENTRY_insert(cache->hashtable, newcache);
|
||||||
if (lh_DECODER_CACHE_ENTRY_error(cache->hashtable)) {
|
if (lh_DECODER_CACHE_ENTRY_error(cache->hashtable)) {
|
||||||
ctx = NULL;
|
ctx = NULL;
|
||||||
|
CRYPTO_THREAD_unlock(cache->lock);
|
||||||
ERR_raise(ERR_LIB_OSSL_DECODER, ERR_R_CRYPTO_LIB);
|
ERR_raise(ERR_LIB_OSSL_DECODER, ERR_R_CRYPTO_LIB);
|
||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue