mirror of
				https://github.com/cuberite/polarssl.git
				synced 2025-11-03 20:22:59 -05:00 
			
		
		
		
	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…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user