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>
diff --git a/library/psa_crypto_slot_management.c b/library/psa_crypto_slot_management.c
index 5d20532..943923f 100644
--- a/library/psa_crypto_slot_management.c
+++ b/library/psa_crypto_slot_management.c
@@ -133,8 +133,9 @@
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 @@
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 );
}
diff --git a/library/psa_crypto_slot_management.h b/library/psa_crypto_slot_management.h
index 75ce0ac..db5acba 100644
--- a/library/psa_crypto_slot_management.h
+++ b/library/psa_crypto_slot_management.h
@@ -137,10 +137,21 @@
* 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.