diff --git a/include/mbedtls/threading.h b/include/mbedtls/threading.h index b4e050241b..fbd7ad2e47 100644 --- a/include/mbedtls/threading.h +++ b/include/mbedtls/threading.h @@ -112,6 +112,13 @@ extern mbedtls_threading_mutex_t mbedtls_threading_gmtime_mutex; * psa_key_slot_state_transition(), psa_register_read(), psa_unregister_read(), * psa_key_slot_has_readers() and psa_wipe_key_slot(). */ extern mbedtls_threading_mutex_t mbedtls_threading_key_slot_mutex; + +/* + * A mutex used to make the PSA global_data struct members thread safe. + * + * This mutex must be held when any read or write to a any of the PSA + * global_data structure members. */ +extern mbedtls_threading_mutex_t mbedtls_threading_psa_globaldata_mutex; #endif #endif /* MBEDTLS_THREADING_C */ diff --git a/library/threading.c b/library/threading.c index c28290fb76..06b474726c 100644 --- a/library/threading.c +++ b/library/threading.c @@ -150,6 +150,7 @@ void mbedtls_threading_set_alt(void (*mutex_init)(mbedtls_threading_mutex_t *), #endif #if defined(MBEDTLS_PSA_CRYPTO_C) mbedtls_mutex_init(&mbedtls_threading_key_slot_mutex); + mbedtls_mutex_init(&mbedtls_threading_psa_globaldata_mutex); #endif } @@ -166,6 +167,7 @@ void mbedtls_threading_free_alt(void) #endif #if defined(MBEDTLS_PSA_CRYPTO_C) mbedtls_mutex_free(&mbedtls_threading_key_slot_mutex); + mbedtls_mutex_free(&mbedtls_threading_psa_globaldata_mutex); #endif } #endif /* MBEDTLS_THREADING_ALT */ @@ -184,6 +186,7 @@ mbedtls_threading_mutex_t mbedtls_threading_gmtime_mutex MUTEX_INIT; #endif #if defined(MBEDTLS_PSA_CRYPTO_C) mbedtls_threading_mutex_t mbedtls_threading_key_slot_mutex MUTEX_INIT; +mbedtls_threading_mutex_t mbedtls_threading_psa_globaldata_mutex MUTEX_INIT; #endif #endif /* MBEDTLS_THREADING_C */