Initialize and free the key slot mutex

Signed-off-by: Ryan Everett <ryan.everett@arm.com>
This commit is contained in:
Ryan Everett 2024-01-08 11:10:03 +00:00
parent 491f7e5ac3
commit 846889355c
2 changed files with 24 additions and 1 deletions

View File

@ -147,7 +147,14 @@ static psa_status_t psa_get_and_lock_key_slot_in_memory(
psa_status_t psa_initialize_key_slots(void) psa_status_t psa_initialize_key_slots(void)
{ {
/* Nothing to do: program startup and psa_wipe_all_key_slots() both #if defined(MBEDTLS_THREADING_C)
/* Initialize the global key slot mutex. */
if (!global_data.key_slots_initialized) {
mbedtls_mutex_init(&global_data.key_slot_mutex);
}
#endif
/* Program startup and psa_wipe_all_key_slots() both
* guarantee that the key slots are initialized to all-zero, which * guarantee that the key slots are initialized to all-zero, which
* means that all the key slots are in a valid, empty state. */ * means that all the key slots are in a valid, empty state. */
global_data.key_slots_initialized = 1; global_data.key_slots_initialized = 1;
@ -164,6 +171,14 @@ void psa_wipe_all_key_slots(void)
slot->state = PSA_SLOT_PENDING_DELETION; slot->state = PSA_SLOT_PENDING_DELETION;
(void) psa_wipe_key_slot(slot); (void) psa_wipe_key_slot(slot);
} }
#if defined(MBEDTLS_THREADING_C)
/* Free the global key slot mutex. */
if (global_data.key_slots_initialized) {
mbedtls_mutex_free(&global_data.key_slot_mutex);
}
#endif
global_data.key_slots_initialized = 0; global_data.key_slots_initialized = 0;
} }

View File

@ -85,6 +85,10 @@ psa_status_t psa_get_and_lock_key_slot(mbedtls_svc_key_id_t key,
psa_key_slot_t **p_slot); psa_key_slot_t **p_slot);
/** Initialize the key slot structures. /** Initialize the key slot structures.
* If multi-threading is enabled then initialize the key slot mutex.
* This function is not thread-safe,
* if called by competing threads the key slot mutex may be initialized
* more than once.
* *
* \retval #PSA_SUCCESS * \retval #PSA_SUCCESS
* Currently this function always succeeds. * Currently this function always succeeds.
@ -92,6 +96,10 @@ psa_status_t psa_get_and_lock_key_slot(mbedtls_svc_key_id_t key,
psa_status_t psa_initialize_key_slots(void); psa_status_t psa_initialize_key_slots(void);
/** Delete all data from key slots in memory. /** Delete all data from key slots in memory.
* If multi-threading is enabled then free the key slot mutex.
* This function is not thread-safe,
* if called by competing threads the key slot mutex may be freed
* more than once.
* *
* This does not affect persistent storage. */ * This does not affect persistent storage. */
void psa_wipe_all_key_slots(void); void psa_wipe_all_key_slots(void);