Commit 73315f7b authored by Thomas Altenbach's avatar Thomas Altenbach Committed by David Brown
Browse files

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: default avatarThomas Altenbach <thomas.altenbach@legrand.com>
parent 453096b1
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -276,6 +276,8 @@ hkdf(uint8_t *ikm, uint16_t ikm_len, uint8_t *info, uint16_t info_len,
        goto error;
    }

    bootutil_hmac_sha256_drop(&hmac);

    /*
     * Expand
     */
@@ -315,6 +317,8 @@ hkdf(uint8_t *ikm, uint16_t ikm_len, uint8_t *info, uint16_t info_len,
            goto error;
        }

        bootutil_hmac_sha256_drop(&hmac);

        if (len > BOOTUTIL_CRYPTO_SHA256_DIGEST_SIZE) {
            memcpy(&okm[off], T, 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;

error: