The branch OpenSSL_1_1_1-stable has been updated via ca607d6e94e11f5332abcc8fa4a4ccb967347efa (commit) from 7a045a4e5ad97f7e123ea33f1f188d2f1a03974b (commit)
- Log ----------------------------------------------------------------- commit ca607d6e94e11f5332abcc8fa4a4ccb967347efa Author: Bernd Edlinger <bernd.edlin...@hotmail.de> Date: Wed Dec 8 14:14:48 2021 +0100 Fix a deadlock in OBJ_NAME_add This happened after an out of memory error: CRYPTO_THREAD_write_lock may hang in OBJ_NAME_add. Reviewed-by: Tomas Mraz <to...@openssl.org> Reviewed-by: Matt Caswell <m...@openssl.org> Reviewed-by: Paul Dale <pa...@openssl.org> (Merged from https://github.com/openssl/openssl/pull/17236) ----------------------------------------------------------------------- Summary of changes: crypto/objects/o_names.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/crypto/objects/o_names.c b/crypto/objects/o_names.c index 979d83577c..15639d6778 100644 --- a/crypto/objects/o_names.c +++ b/crypto/objects/o_names.c @@ -67,8 +67,14 @@ static CRYPTO_ONCE init = CRYPTO_ONCE_STATIC_INIT; DEFINE_RUN_ONCE_STATIC(o_names_init) { CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_DISABLE); - names_lh = lh_OBJ_NAME_new(obj_name_hash, obj_name_cmp); + names_lh = NULL; obj_lock = CRYPTO_THREAD_lock_new(); + if (obj_lock != NULL) + names_lh = lh_OBJ_NAME_new(obj_name_hash, obj_name_cmp); + if (names_lh == NULL) { + CRYPTO_THREAD_lock_free(obj_lock); + obj_lock = NULL; + } CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_ENABLE); return names_lh != NULL && obj_lock != NULL; } @@ -217,10 +223,8 @@ int OBJ_NAME_add(const char *name, int type, const char *data) type &= ~OBJ_NAME_ALIAS; onp = OPENSSL_malloc(sizeof(*onp)); - if (onp == NULL) { - /* ERROR */ - goto unlock; - } + if (onp == NULL) + return 0; onp->name = name; onp->alias = alias;