Strict C99: don't use an anonymous union field

GCC and Clang accept anonymous union fields, but this is not valid ISO
C. Use a named field.

Signed-off-by: Gilles Peskine <Gilles.Peskine@arm.com>
This commit is contained in:
Gilles Peskine 2020-04-14 19:33:25 +02:00
parent 01fd875b32
commit 1a75d0c155

View File

@ -72,7 +72,7 @@ struct psa_se_drv_table_entry_s
{ {
psa_drv_se_internal_context_t internal; psa_drv_se_internal_context_t internal;
psa_drv_se_context_t context; psa_drv_se_context_t context;
}; } u;
}; };
static psa_se_drv_table_entry_t driver_table[PSA_MAX_SE_DRIVERS]; static psa_se_drv_table_entry_t driver_table[PSA_MAX_SE_DRIVERS];
@ -104,7 +104,7 @@ const psa_drv_se_t *psa_get_se_driver_methods(
psa_drv_se_context_t *psa_get_se_driver_context( psa_drv_se_context_t *psa_get_se_driver_context(
psa_se_drv_table_entry_t *driver ) psa_se_drv_table_entry_t *driver )
{ {
return( &driver->context ); return( &driver->u.context );
} }
int psa_get_se_driver( psa_key_lifetime_t lifetime, int psa_get_se_driver( psa_key_lifetime_t lifetime,
@ -115,7 +115,7 @@ int psa_get_se_driver( psa_key_lifetime_t lifetime,
if( p_methods != NULL ) if( p_methods != NULL )
*p_methods = ( driver ? driver->methods : NULL ); *p_methods = ( driver ? driver->methods : NULL );
if( p_drv_context != NULL ) if( p_drv_context != NULL )
*p_drv_context = ( driver ? &driver->context : NULL ); *p_drv_context = ( driver ? &driver->u.context : NULL );
return( driver != NULL ); return( driver != NULL );
} }
@ -134,7 +134,7 @@ static psa_status_t psa_get_se_driver_its_file_uid(
#if SIZE_MAX > UINT32_MAX #if SIZE_MAX > UINT32_MAX
/* ITS file sizes are limited to 32 bits. */ /* ITS file sizes are limited to 32 bits. */
if( driver->internal.persistent_data_size > UINT32_MAX ) if( driver->u.internal.persistent_data_size > UINT32_MAX )
return( PSA_ERROR_NOT_SUPPORTED ); return( PSA_ERROR_NOT_SUPPORTED );
#endif #endif
@ -162,8 +162,8 @@ psa_status_t psa_load_se_persistent_data(
* persistent_data_size is in range, but compilers don't know that, * persistent_data_size is in range, but compilers don't know that,
* so cast to reassure them. */ * so cast to reassure them. */
return( psa_its_get( uid, 0, return( psa_its_get( uid, 0,
(uint32_t) driver->internal.persistent_data_size, (uint32_t) driver->u.internal.persistent_data_size,
driver->internal.persistent_data, driver->u.internal.persistent_data,
&length ) ); &length ) );
} }
@ -181,8 +181,8 @@ psa_status_t psa_save_se_persistent_data(
* persistent_data_size is in range, but compilers don't know that, * persistent_data_size is in range, but compilers don't know that,
* so cast to reassure them. */ * so cast to reassure them. */
return( psa_its_set( uid, return( psa_its_set( uid,
(uint32_t) driver->internal.persistent_data_size, (uint32_t) driver->u.internal.persistent_data_size,
driver->internal.persistent_data, driver->u.internal.persistent_data,
0 ) ); 0 ) );
} }
@ -221,8 +221,8 @@ psa_status_t psa_find_se_slot_for_key(
driver->methods->key_management->p_validate_slot_number; driver->methods->key_management->p_validate_slot_number;
if( p_validate_slot_number == NULL ) if( p_validate_slot_number == NULL )
return( PSA_ERROR_NOT_SUPPORTED ); return( PSA_ERROR_NOT_SUPPORTED );
status = p_validate_slot_number( &driver->context, status = p_validate_slot_number( &driver->u.context,
driver->internal.persistent_data, driver->u.internal.persistent_data,
attributes, method, attributes, method,
*slot_number ); *slot_number );
} }
@ -240,8 +240,8 @@ psa_status_t psa_find_se_slot_for_key(
driver->methods->key_management->p_allocate; driver->methods->key_management->p_allocate;
if( p_allocate == NULL ) if( p_allocate == NULL )
return( PSA_ERROR_NOT_SUPPORTED ); return( PSA_ERROR_NOT_SUPPORTED );
status = p_allocate( &driver->context, status = p_allocate( &driver->u.context,
driver->internal.persistent_data, driver->u.internal.persistent_data,
attributes, method, attributes, method,
slot_number ); slot_number );
} }
@ -265,8 +265,8 @@ psa_status_t psa_destroy_se_key( psa_se_drv_table_entry_t *driver,
driver->methods->key_management->p_destroy == NULL ) driver->methods->key_management->p_destroy == NULL )
return( PSA_ERROR_NOT_PERMITTED ); return( PSA_ERROR_NOT_PERMITTED );
status = driver->methods->key_management->p_destroy( status = driver->methods->key_management->p_destroy(
&driver->context, &driver->u.context,
driver->internal.persistent_data, driver->u.internal.persistent_data,
slot_number ); slot_number );
storage_status = psa_save_se_persistent_data( driver ); storage_status = psa_save_se_persistent_data( driver );
return( status == PSA_SUCCESS ? storage_status : status ); return( status == PSA_SUCCESS ? storage_status : status );
@ -284,8 +284,8 @@ psa_status_t psa_init_all_se_drivers( void )
if( methods->p_init != NULL ) if( methods->p_init != NULL )
{ {
psa_status_t status = methods->p_init( psa_status_t status = methods->p_init(
&driver->context, &driver->u.context,
driver->internal.persistent_data, driver->u.internal.persistent_data,
driver->lifetime ); driver->lifetime );
if( status != PSA_SUCCESS ) if( status != PSA_SUCCESS )
return( status ); return( status );
@ -341,14 +341,14 @@ psa_status_t psa_register_se_driver(
driver_table[i].lifetime = lifetime; driver_table[i].lifetime = lifetime;
driver_table[i].methods = methods; driver_table[i].methods = methods;
driver_table[i].internal.persistent_data_size = driver_table[i].u.internal.persistent_data_size =
methods->persistent_data_size; methods->persistent_data_size;
if( methods->persistent_data_size != 0 ) if( methods->persistent_data_size != 0 )
{ {
driver_table[i].internal.persistent_data = driver_table[i].u.internal.persistent_data =
mbedtls_calloc( 1, methods->persistent_data_size ); mbedtls_calloc( 1, methods->persistent_data_size );
if( driver_table[i].internal.persistent_data == NULL ) if( driver_table[i].u.internal.persistent_data == NULL )
{ {
status = PSA_ERROR_INSUFFICIENT_MEMORY; status = PSA_ERROR_INSUFFICIENT_MEMORY;
goto error; goto error;
@ -373,8 +373,8 @@ void psa_unregister_all_se_drivers( void )
size_t i; size_t i;
for( i = 0; i < PSA_MAX_SE_DRIVERS; i++ ) for( i = 0; i < PSA_MAX_SE_DRIVERS; i++ )
{ {
if( driver_table[i].internal.persistent_data != NULL ) if( driver_table[i].u.internal.persistent_data != NULL )
mbedtls_free( driver_table[i].internal.persistent_data ); mbedtls_free( driver_table[i].u.internal.persistent_data );
} }
memset( driver_table, 0, sizeof( driver_table ) ); memset( driver_table, 0, sizeof( driver_table ) );
} }