From 11e9310fd17808e69c0fc590697e8445997b251c Mon Sep 17 00:00:00 2001 From: kXuan Date: Wed, 10 Aug 2022 16:32:06 +0800 Subject: [PATCH] ctr_drbg: fix free uninitialized aes context Application may enabled AES_ALT and define mbedtls_aes_context by its own. The initial state of user-defined mbedtls_aes_context may not all byte zero. In mbedtls_ctr_drbg_init, the code set all byte to zero, including the AES context nested in the ctr_drbg context. And in mbedtls_ctr_drbg_free, the code calls mbedtls_aes_free on an AES context without calling mbedtls_aes_init. If user-defined AES context requires an non-zero init, the mbedtls_aes_free call in mbedtls_ctr_drbg_free is illegal. This patch fix this issue by add mbedtls_aes_init in mbedtls_ctr_drbg_init. So aes context will always be initialized to correct state. Signed-off-by: kXuan --- library/ctr_drbg.c | 1 + 1 file changed, 1 insertion(+) diff --git a/library/ctr_drbg.c b/library/ctr_drbg.c index 43f490e831..75103a3992 100644 --- a/library/ctr_drbg.c +++ b/library/ctr_drbg.c @@ -51,6 +51,7 @@ void mbedtls_ctr_drbg_init( mbedtls_ctr_drbg_context *ctx ) { memset( ctx, 0, sizeof( mbedtls_ctr_drbg_context ) ); + mbedtls_aes_init( &ctx->aes_ctx ); /* Indicate that the entropy nonce length is not set explicitly. * See mbedtls_ctr_drbg_set_nonce_len(). */ ctx->reseed_counter = -1;