Browse Source

Make sure we take the ctx->lock in ossl_lib_ctx_generic_new()

The function ossl_lib_ctx_generic_new() modifies the exdata. This may
be simultaneously being modified by other threads and therefore we need
to make sure we take the lock before doing so.

Reviewed-by: Tomas Mraz <tmraz@fedoraproject.org>
(Merged from https://github.com/openssl/openssl/pull/13660)
master
Matt Caswell 1 year ago
parent
commit
2c40421440
1 changed files with 6 additions and 2 deletions
  1. +6
    -2
      crypto/context.c

+ 6
- 2
crypto/context.c View File

@ -228,10 +228,14 @@ static void ossl_lib_ctx_generic_new(void *parent_ign, void *ptr_ign,
long argl_ign, void *argp)
{
const OSSL_LIB_CTX_METHOD *meth = argp;
void *ptr = meth->new_func(crypto_ex_data_get_ossl_lib_ctx(ad));
OSSL_LIB_CTX *ctx = crypto_ex_data_get_ossl_lib_ctx(ad);
void *ptr = meth->new_func(ctx);
if (ptr != NULL)
if (ptr != NULL) {
CRYPTO_THREAD_write_lock(ctx->lock);
CRYPTO_set_ex_data(ad, index, ptr);
CRYPTO_THREAD_unlock(ctx->lock);
}
}
static void ossl_lib_ctx_generic_free(void *parent_ign, void *ptr,
CRYPTO_EX_DATA *ad, int index,


Loading…
Cancel
Save