diff options
| author | Demi Marie Obenour <demiobenour@gmail.com> | 2022-12-08 15:24:01 -0500 |
|---|---|---|
| committer | Demi Marie Obenour <demiobenour@gmail.com> | 2022-12-29 18:41:10 -0500 |
| commit | f47547b35462571636a76b737602e827ae43bc24 (patch) | |
| tree | 3a2cd64ee5a56b1c7ff35b2af0702994ad81b93a /drivers | |
| parent | 72460f50e2437a85ce5229c430931aab8f4a0d5b (diff) | |
| download | arm-trusted-firmware-f47547b35462571636a76b737602e827ae43bc24.tar.gz | |
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 <demiobenour@gmail.com>
Diffstat (limited to 'drivers')
| -rw-r--r-- | drivers/auth/mbedtls/mbedtls_crypto.c | 11 |
1 files changed, 7 insertions, 4 deletions
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; } |
