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:
parent
4640c15deb
commit
cbf6a1d651
@ -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 );
|
||||
}
|
||||
|
@ -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.
|
||||
|
Loading…
Reference in New Issue
Block a user