From: Demi Marie Obenour Date: Thu, 8 Dec 2022 20:24:01 +0000 (-0500) Subject: fix(auth): reject invalid padding in digests X-Git-Tag: baikal/aarch64/sdk5.10~1^2~288^2~2 X-Git-Url: https://git.baikalelectronics.ru/?a=commitdiff_plain;h=f47547b35462571636a76b737602e827ae43bc24;p=arm-tf.git fix(auth): reject invalid padding in digests Digests must not have padding after the SEQUENCE or OCTET STRING. Change-Id: Id25ab23111781f8c8a97c2c3c8edf1cc4a4384c0 Signed-off-by: Demi Marie Obenour --- diff --git a/drivers/auth/mbedtls/mbedtls_crypto.c b/drivers/auth/mbedtls/mbedtls_crypto.c index d231179f5..178bbf5f4 100644 --- a/drivers/auth/mbedtls/mbedtls_crypto.c +++ b/drivers/auth/mbedtls/mbedtls_crypto.c @@ -170,12 +170,15 @@ static int verify_hash(void *data_ptr, unsigned int data_len, size_t len; int rc; - /* Digest info should be an MBEDTLS_ASN1_SEQUENCE */ + /* + * Digest info should be an MBEDTLS_ASN1_SEQUENCE + * and consume all bytes. + */ p = (unsigned char *)digest_info_ptr; end = p + digest_info_len; rc = mbedtls_asn1_get_tag(&p, end, &len, MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE); - if (rc != 0) { + if (rc != 0 || ((size_t)(end - p) != len)) { return CRYPTO_ERR_HASH; } @@ -195,9 +198,9 @@ static int verify_hash(void *data_ptr, unsigned int data_len, return CRYPTO_ERR_HASH; } - /* Hash should be octet string type */ + /* Hash should be octet string type and consume all bytes */ rc = mbedtls_asn1_get_tag(&p, end, &len, MBEDTLS_ASN1_OCTET_STRING); - if (rc != 0) { + if ((rc != 0) || ((size_t)(end - p) != len)) { return CRYPTO_ERR_HASH; }