Call psa_reset_key_attributes after psa_get_key_attributes
After calling psa_get_key_attributes(), call
psa_reset_key_attributes() if the key may have domain parameters,
because that's the way to free the domain parameter substructure in
the attribute structure. Keep not calling reset() in some places where
the key can only be a symmetric key which doesn't have domain
parameters.
diff --git a/tests/suites/test_suite_psa_crypto.function b/tests/suites/test_suite_psa_crypto.function
index 152f7e9..8bf67e6 100644
--- a/tests/suites/test_suite_psa_crypto.function
+++ b/tests/suites/test_suite_psa_crypto.function
@@ -598,6 +598,7 @@
public_key, public_key_length );
exit:
mbedtls_free( public_key );
+ psa_reset_key_attributes( &attributes );
return( status );
}
@@ -635,6 +636,7 @@
output, sizeof( output ), &output_length );
exit:
mbedtls_free( public_key );
+ psa_reset_key_attributes( &attributes );
return( status );
}
@@ -936,7 +938,8 @@
{
TEST_EQUAL( psa_export_key( handle, NULL, 0, &exported_length ),
PSA_ERROR_NOT_PERMITTED );
- return( 1 );
+ ok = 1;
+ goto exit;
}
exported_size = PSA_KEY_EXPORT_MAX_SIZE( psa_get_key_type( &attributes ),
@@ -952,6 +955,7 @@
exit:
mbedtls_free( exported );
+ psa_reset_key_attributes( &attributes );
return( ok );
}
@@ -987,6 +991,7 @@
exit:
mbedtls_free( exported );
+ psa_reset_key_attributes( &attributes );
return( ok );
}
@@ -1224,6 +1229,7 @@
exit:
psa_destroy_key( handle );
+ psa_reset_key_attributes( &got_attributes );
mbedtls_psa_crypto_free( );
}
/* END_CASE */
@@ -1354,6 +1360,7 @@
exit:
mbedtls_free( exported );
mbedtls_free( reexported );
+ psa_reset_key_attributes( &got_attributes );
mbedtls_psa_crypto_free( );
}
/* END_CASE */
@@ -1417,6 +1424,7 @@
exit:
mbedtls_free( exported );
psa_destroy_key( handle );
+ psa_reset_key_attributes( &attributes );
mbedtls_psa_crypto_free( );
}
/* END_CASE */
@@ -1458,6 +1466,7 @@
exit:
psa_destroy_key( handle );
+ psa_reset_key_attributes( &got_attributes );
mbedtls_psa_crypto_free( );
}
/* END_CASE */
@@ -1489,6 +1498,7 @@
exit:
psa_destroy_key( handle );
+ psa_reset_key_attributes( &attributes );
mbedtls_psa_crypto_free( );
}
/* END_CASE */
@@ -1733,6 +1743,7 @@
exit:
psa_destroy_key( handle );
+ psa_reset_key_attributes( &attributes );
mbedtls_psa_crypto_free( );
mbedtls_free( buffer );
}
@@ -1977,6 +1988,8 @@
PSA_ASSERT( psa_close_key( target_handle ) );
exit:
+ psa_reset_key_attributes( &source_attributes );
+ psa_reset_key_attributes( &target_attributes );
mbedtls_psa_crypto_free( );
mbedtls_free( export_buffer );
}
@@ -3488,6 +3501,7 @@
signature, signature_length );
exit:
+ psa_reset_key_attributes( &attributes );
psa_destroy_key( handle );
mbedtls_free( signature );
mbedtls_psa_crypto_free( );
@@ -3532,6 +3546,7 @@
TEST_ASSERT( signature_length <= signature_size );
exit:
+ psa_reset_key_attributes( &attributes );
psa_destroy_key( handle );
mbedtls_free( signature );
mbedtls_psa_crypto_free( );
@@ -3598,6 +3613,7 @@
}
exit:
+ psa_reset_key_attributes( &attributes );
psa_destroy_key( handle );
mbedtls_free( signature );
mbedtls_psa_crypto_free( );
@@ -3630,6 +3646,7 @@
signature_data->x,
signature_data->len ) );
exit:
+ psa_reset_key_attributes( &attributes );
psa_destroy_key( handle );
mbedtls_psa_crypto_free( );
}
@@ -3665,6 +3682,7 @@
TEST_EQUAL( actual_status, expected_status );
exit:
+ psa_reset_key_attributes( &attributes );
psa_destroy_key( handle );
mbedtls_psa_crypto_free( );
}
@@ -3732,6 +3750,7 @@
}
exit:
+ psa_reset_key_attributes( &attributes );
psa_destroy_key( handle );
mbedtls_free( output );
mbedtls_psa_crypto_free( );
@@ -3795,6 +3814,7 @@
output2, output2_length );
exit:
+ psa_reset_key_attributes( &attributes );
psa_destroy_key( handle );
mbedtls_free( output );
mbedtls_free( output2 );
@@ -3857,6 +3877,7 @@
}
exit:
+ psa_reset_key_attributes( &attributes );
psa_destroy_key( handle );
mbedtls_free( output );
mbedtls_psa_crypto_free( );
@@ -3918,6 +3939,7 @@
}
exit:
+ psa_reset_key_attributes( &attributes );
psa_destroy_key( handle );
mbedtls_free( output );
mbedtls_psa_crypto_free( );
@@ -4314,6 +4336,7 @@
exit:
psa_generator_abort( &generator );
+ psa_reset_key_attributes( &got_attributes );
psa_destroy_key( base_handle );
psa_destroy_key( derived_handle );
mbedtls_psa_crypto_free( );
@@ -4689,6 +4712,7 @@
goto exit;
exit:
+ psa_reset_key_attributes( &got_attributes );
psa_destroy_key( handle );
mbedtls_psa_crypto_free( );
}
@@ -4813,6 +4837,7 @@
goto exit;
exit:
+ psa_reset_key_attributes( &attributes );
mbedtls_free( first_export );
mbedtls_free( second_export );
psa_generator_abort( &generator );