psa: slot mgmt: Add access counter overflow check

It adds a bit a code for not much but that way we
are such that a count overflow cannot occur.

Signed-off-by: Ronald Cron <ronald.cron@arm.com>
This commit is contained in:
Ronald Cron 2020-11-13 15:59:59 +01:00
parent 4640c15deb
commit cbf6a1d651
2 changed files with 19 additions and 4 deletions

View File

@ -133,8 +133,9 @@ static psa_status_t psa_search_key_in_slots(
if( status == PSA_SUCCESS ) if( status == PSA_SUCCESS )
{ {
*p_slot = slot; status = psa_increment_key_slot_access_count( slot );
psa_increment_key_slot_access_count( slot ); if( status == PSA_SUCCESS )
*p_slot = slot;
} }
return( status ); return( status );
@ -208,10 +209,13 @@ psa_status_t psa_get_empty_key_slot( psa_key_id_t *volatile_key_id,
if( selected_slot != NULL ) if( selected_slot != NULL )
{ {
status = psa_increment_key_slot_access_count( selected_slot );
if( status != PSA_SUCCESS )
goto error;
*volatile_key_id = PSA_KEY_ID_VOLATILE_MIN + *volatile_key_id = PSA_KEY_ID_VOLATILE_MIN +
( (psa_key_id_t)( selected_slot - global_data.key_slots ) ); ( (psa_key_id_t)( selected_slot - global_data.key_slots ) );
*p_slot = selected_slot; *p_slot = selected_slot;
psa_increment_key_slot_access_count( selected_slot );
return( PSA_SUCCESS ); return( PSA_SUCCESS );
} }

View File

@ -137,10 +137,21 @@ psa_status_t psa_get_empty_key_slot( psa_key_id_t *volatile_key_id,
* This function increments the slot access counter by one. * This function increments the slot access counter by one.
* *
* \param[in] slot The key slot. * \param[in] slot The key slot.
*
* \retval #PSA_SUCCESS
The access count was incremented.
* \retval #PSA_ERROR_CORRUPTION_DETECTED
* The access count already reached its maximum value and was not
* increased.
*/ */
static inline void psa_increment_key_slot_access_count( psa_key_slot_t *slot ) static inline psa_status_t psa_increment_key_slot_access_count( psa_key_slot_t *slot )
{ {
if( slot->access_count >= SIZE_MAX )
return( PSA_ERROR_CORRUPTION_DETECTED );
slot->access_count++; slot->access_count++;
return( PSA_SUCCESS );
} }
/** Decrement slot access counter. /** Decrement slot access counter.