bootutil: Fix memory leak in HKDF implementation

The bootutil_hmac_sha256_set_key routine performs some dynamic memory
allocations when mbedTLS is used. To properly free the allocated memory,
bootutil_hmac_sha256_drop must be called before reinitializing the HMAC
context using bootutil_hmac_sha256_init.  However, in the hkdf routine,
the HMAC context was freed only once even though it was initialized
multiple times.

Signed-off-by: Thomas Altenbach <thomas.altenbach@legrand.com>
This commit is contained in:
Thomas Altenbach 2024-04-04 13:46:38 +02:00 committed by David Brown
parent 453096b17d
commit 73315f7b51
1 changed files with 4 additions and 1 deletions

View File

@ -276,6 +276,8 @@ hkdf(uint8_t *ikm, uint16_t ikm_len, uint8_t *info, uint16_t info_len,
goto error; goto error;
} }
bootutil_hmac_sha256_drop(&hmac);
/* /*
* Expand * Expand
*/ */
@ -315,6 +317,8 @@ hkdf(uint8_t *ikm, uint16_t ikm_len, uint8_t *info, uint16_t info_len,
goto error; goto error;
} }
bootutil_hmac_sha256_drop(&hmac);
if (len > BOOTUTIL_CRYPTO_SHA256_DIGEST_SIZE) { if (len > BOOTUTIL_CRYPTO_SHA256_DIGEST_SIZE) {
memcpy(&okm[off], T, BOOTUTIL_CRYPTO_SHA256_DIGEST_SIZE); memcpy(&okm[off], T, BOOTUTIL_CRYPTO_SHA256_DIGEST_SIZE);
len -= BOOTUTIL_CRYPTO_SHA256_DIGEST_SIZE; len -= BOOTUTIL_CRYPTO_SHA256_DIGEST_SIZE;
@ -324,7 +328,6 @@ hkdf(uint8_t *ikm, uint16_t ikm_len, uint8_t *info, uint16_t info_len,
} }
} }
bootutil_hmac_sha256_drop(&hmac);
return 0; return 0;
error: error: