From 2a15a0c868fef9d228c834b72940237dd9cc49f4 Mon Sep 17 00:00:00 2001 From: Hanno Becker Date: Fri, 13 Sep 2019 14:19:03 +0100 Subject: [PATCH] X.509: Remove red'n bounds checks and zeroiz'n in OtherName parsing - ASN.1 parsing functions check that length don't exceed buffer bounds, so checks `p + len > end` are redundant. - If `p + len == end`, this is erroneous because we expect further fields, which is automatically caught by the next ASN.1 parsing call. Hence, the two branches handling `p + len >= end` in x509_get_other_name() can be removed. Further, zeroization of the `other_name` structure isn't necessary because it's not confidential (and it's also not performed on other error conditions in this function). Signed-off-by: Andrzej Kurek --- library/x509.c | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/library/x509.c b/library/x509.c index fea1e9951..9e17d721c 100644 --- a/library/x509.c +++ b/library/x509.c @@ -1156,11 +1156,6 @@ static int x509_get_other_name(const mbedtls_x509_buf *subject_alt_name, return MBEDTLS_ERR_X509_FEATURE_UNAVAILABLE; } - if (p + len >= end) { - mbedtls_platform_zeroize(other_name, sizeof(*other_name)); - return MBEDTLS_ERROR_ADD(MBEDTLS_ERR_X509_INVALID_EXTENSIONS, - MBEDTLS_ERR_ASN1_LENGTH_MISMATCH); - } p += len; if ((ret = mbedtls_asn1_get_tag(&p, end, &len, MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_CONTEXT_SPECIFIC)) != @@ -1181,11 +1176,6 @@ static int x509_get_other_name(const mbedtls_x509_buf *subject_alt_name, other_name->value.hardware_module_name.oid.p = p; other_name->value.hardware_module_name.oid.len = len; - if (p + len >= end) { - mbedtls_platform_zeroize(other_name, sizeof(*other_name)); - return MBEDTLS_ERROR_ADD(MBEDTLS_ERR_X509_INVALID_EXTENSIONS, - MBEDTLS_ERR_ASN1_LENGTH_MISMATCH); - } p += len; if ((ret = mbedtls_asn1_get_tag(&p, end, &len, MBEDTLS_ASN1_OCTET_STRING)) != 0) { @@ -1197,8 +1187,6 @@ static int x509_get_other_name(const mbedtls_x509_buf *subject_alt_name, other_name->value.hardware_module_name.val.len = len; p += len; if (p != end) { - mbedtls_platform_zeroize(other_name, - sizeof(*other_name)); return MBEDTLS_ERROR_ADD(MBEDTLS_ERR_X509_INVALID_EXTENSIONS, MBEDTLS_ERR_ASN1_LENGTH_MISMATCH); }