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 )
{
*p_slot = slot;
psa_increment_key_slot_access_count( slot );
status = psa_increment_key_slot_access_count( slot );
if( status == PSA_SUCCESS )
*p_slot = slot;
}
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 )
{
status = psa_increment_key_slot_access_count( selected_slot );
if( status != PSA_SUCCESS )
goto error;
*volatile_key_id = PSA_KEY_ID_VOLATILE_MIN +
( (psa_key_id_t)( selected_slot - global_data.key_slots ) );
*p_slot = selected_slot;
psa_increment_key_slot_access_count( selected_slot );
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.
*
* \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++;
return( PSA_SUCCESS );
}
/** Decrement slot access counter.