diff options
| author | Demi Marie Obenour <demiobenour@gmail.com> | 2023-01-19 09:50:16 -0500 |
|---|---|---|
| committer | Demi Marie Obenour <demiobenour@gmail.com> | 2023-02-27 14:08:28 -0500 |
| commit | ddd9f6757e61ca9abe682eeb8d6dc3b16ef1044c (patch) | |
| tree | 6f9a1d12387c291b514fec2bac0ae83d289af2bb /drivers | |
| parent | 6a7104a324ce67c5585c9a75ff9e48fa15408fa5 (diff) | |
| download | arm-trusted-firmware-ddd9f6757e61ca9abe682eeb8d6dc3b16ef1044c.tar.gz | |
refactor(auth): clean up certificate length checks
The previous code was correct but unnecessarily verbose.
Change-Id: Ia19c667811a7c3b6957a0274d36076b0b16e36b7
Signed-off-by: Demi Marie Obenour <demiobenour@gmail.com>
Diffstat (limited to 'drivers')
| -rw-r--r-- | drivers/auth/mbedtls/mbedtls_x509_parser.c | 24 |
1 files changed, 6 insertions, 18 deletions
diff --git a/drivers/auth/mbedtls/mbedtls_x509_parser.c b/drivers/auth/mbedtls/mbedtls_x509_parser.c index 41024aa70..b538c782b 100644 --- a/drivers/auth/mbedtls/mbedtls_x509_parser.c +++ b/drivers/auth/mbedtls/mbedtls_x509_parser.c @@ -161,7 +161,8 @@ static int cert_parse(void *img, unsigned int img_len) p = (unsigned char *)img; len = img_len; - end = p + len; + crt_end = p + len; + end = crt_end; /* * Certificate ::= SEQUENCE { @@ -171,15 +172,10 @@ static int cert_parse(void *img, unsigned int img_len) */ ret = mbedtls_asn1_get_tag(&p, end, &len, MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE); - if (ret != 0) { + if ((ret != 0) || ((p + len) != end)) { return IMG_PARSER_ERR_FORMAT; } - if (len != (size_t)(end - p)) { - return IMG_PARSER_ERR_FORMAT; - } - crt_end = p + len; - /* * TBSCertificate ::= SEQUENCE { */ @@ -220,9 +216,6 @@ static int cert_parse(void *img, unsigned int img_len) if (ret != 0) { return IMG_PARSER_ERR_FORMAT; } - if ((end - p) < 1) { - return IMG_PARSER_ERR_FORMAT; - } sig_alg1.len = (p + len) - sig_alg1.p; p += len; @@ -408,19 +401,14 @@ static int cert_parse(void *img, unsigned int img_len) /* * signatureValue BIT STRING + * } -- must consume all bytes */ signature.p = p; ret = mbedtls_asn1_get_bitstring_null(&p, end, &len); - if (ret != 0) { - return IMG_PARSER_ERR_FORMAT; - } - signature.len = (p + len) - signature.p; - p += len; - - /* Check certificate length */ - if (p != end) { + if ((ret != 0) || ((p + len) != end)) { return IMG_PARSER_ERR_FORMAT; } + signature.len = end - signature.p; return IMG_PARSER_OK; } |
