mirror of
https://github.com/Mbed-TLS/mbedtls.git
synced 2025-08-08 17:42:09 +03:00
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 <andrzej.kurek@arm.com>
This commit is contained in:
committed by
Andrzej Kurek
parent
9de47b485b
commit
c081e6b4c3
@@ -1733,12 +1733,6 @@ static int x509_get_other_name( const mbedtls_x509_buf *subject_alt_name,
|
|||||||
return( MBEDTLS_ERR_X509_FEATURE_UNAVAILABLE );
|
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;
|
p += len;
|
||||||
if( ( ret = mbedtls_asn1_get_tag( &p, end, &len,
|
if( ( ret = mbedtls_asn1_get_tag( &p, end, &len,
|
||||||
MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_CONTEXT_SPECIFIC ) ) != 0 )
|
MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_CONTEXT_SPECIFIC ) ) != 0 )
|
||||||
@@ -1755,12 +1749,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.p = p;
|
||||||
other_name->value.hardware_module_name.oid.len = len;
|
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;
|
p += len;
|
||||||
if( ( ret = mbedtls_asn1_get_tag( &p, end, &len,
|
if( ( ret = mbedtls_asn1_get_tag( &p, end, &len,
|
||||||
MBEDTLS_ASN1_OCTET_STRING ) ) != 0 )
|
MBEDTLS_ASN1_OCTET_STRING ) ) != 0 )
|
||||||
@@ -1772,8 +1760,6 @@ static int x509_get_other_name( const mbedtls_x509_buf *subject_alt_name,
|
|||||||
p += len;
|
p += len;
|
||||||
if( p != end )
|
if( p != end )
|
||||||
{
|
{
|
||||||
mbedtls_platform_zeroize( other_name,
|
|
||||||
sizeof( *other_name ) );
|
|
||||||
return( MBEDTLS_ERROR_ADD( MBEDTLS_ERR_X509_INVALID_EXTENSIONS,
|
return( MBEDTLS_ERROR_ADD( MBEDTLS_ERR_X509_INVALID_EXTENSIONS,
|
||||||
MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ) );
|
MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ) );
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user