From e715f88d9d30e2c2812280f5952339e9dc25b09a Mon Sep 17 00:00:00 2001 From: Paul Elliott Date: Thu, 20 May 2021 21:54:19 +0100 Subject: [PATCH] Fix key slot being used uninitialised on error Signed-off-by: Paul Elliott --- library/psa_crypto.c | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/library/psa_crypto.c b/library/psa_crypto.c index fcc22e167e..5d55e4543d 100644 --- a/library/psa_crypto.c +++ b/library/psa_crypto.c @@ -3240,7 +3240,7 @@ psa_status_t psa_aead_encrypt_setup( psa_aead_operation_t *operation, { psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED; psa_status_t unlock_status = PSA_ERROR_CORRUPTION_DETECTED; - psa_key_slot_t *slot; + psa_key_slot_t *slot = NULL; if( !PSA_ALG_IS_AEAD( alg ) || PSA_ALG_IS_WILDCARD( alg ) ) { @@ -3282,10 +3282,13 @@ psa_status_t psa_aead_encrypt_setup( psa_aead_operation_t *operation, exit: - unlock_status = psa_unlock_key_slot( slot ); + if( slot ) + { + unlock_status = psa_unlock_key_slot( slot ); - if( unlock_status != PSA_SUCCESS ) - status = unlock_status; + if( unlock_status != PSA_SUCCESS ) + status = unlock_status; + } if( status == PSA_SUCCESS ) operation->alg = psa_aead_get_base_algorithm( alg ); @@ -3302,7 +3305,7 @@ psa_status_t psa_aead_decrypt_setup( psa_aead_operation_t *operation, { psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED; psa_status_t unlock_status = PSA_ERROR_CORRUPTION_DETECTED; - psa_key_slot_t *slot; + psa_key_slot_t *slot = NULL; if( !PSA_ALG_IS_AEAD( alg ) || PSA_ALG_IS_WILDCARD( alg ) ) { @@ -3344,10 +3347,13 @@ psa_status_t psa_aead_decrypt_setup( psa_aead_operation_t *operation, exit: - unlock_status = psa_unlock_key_slot( slot ); + if( slot ) + { + unlock_status = psa_unlock_key_slot( slot ); - if( unlock_status != PSA_SUCCESS ) - status = unlock_status; + if( unlock_status != PSA_SUCCESS ) + status = unlock_status; + } if( status == PSA_SUCCESS ) operation->alg = psa_aead_get_base_algorithm( alg );