summaryrefslogtreecommitdiffstats
path: root/crypto
diff options
context:
space:
mode:
Diffstat (limited to 'crypto')
-rw-r--r--crypto/encode_decode/decoder_pkey.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/crypto/encode_decode/decoder_pkey.c b/crypto/encode_decode/decoder_pkey.c
index d00ec75bea..acb061c26a 100644
--- a/crypto/encode_decode/decoder_pkey.c
+++ b/crypto/encode_decode/decoder_pkey.c
@@ -835,12 +835,18 @@ OSSL_DECODER_CTX_new_for_pkey(EVP_PKEY **pkey,
newcache->template = ctx;
if (!CRYPTO_THREAD_write_lock(cache->lock)) {
+ ctx = NULL;
ERR_raise(ERR_LIB_OSSL_DECODER, ERR_R_CRYPTO_LIB);
- return NULL;
+ goto err;
}
res = lh_DECODER_CACHE_ENTRY_retrieve(cache->hashtable, &cacheent);
if (res == NULL) {
- 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)) {
+ ctx = NULL;
+ ERR_raise(ERR_LIB_OSSL_DECODER, ERR_R_CRYPTO_LIB);
+ goto err;
+ }
} else {
/*
* We raced with another thread to construct this and lost. Free