diff options
author | tb <> | 2021-12-24 02:02:37 +0000 |
---|---|---|
committer | tb <> | 2021-12-24 02:02:37 +0000 |
commit | 2a6ad3d378214786ed277d168beba46710d74207 (patch) | |
tree | 7f0b1ddac23fd280bfd1d94d754267f5d34c7852 /src | |
parent | 41baa1b274bc3870ce7bbce17b23f6e0820a1a93 (diff) | |
download | openbsd-2a6ad3d378214786ed277d168beba46710d74207.tar.gz openbsd-2a6ad3d378214786ed277d168beba46710d74207.tar.bz2 openbsd-2a6ad3d378214786ed277d168beba46710d74207.zip |
Remove asserts from addr_validate_path_internal()
This is reachable from x509_verify(), but all asserts are previously
checked in the caller. Turn them into error checks and make sure
the error is set on the X509_STORE_CTX if present. Change some
stack == NULL || sk_num(stack) == 0 checks into sk_num(stack) <= 0
which is equivalent but simpler.
ok jsing
Diffstat (limited to 'src')
-rw-r--r-- | src/lib/libcrypto/x509/x509_addr.c | 28 |
1 files changed, 19 insertions, 9 deletions
diff --git a/src/lib/libcrypto/x509/x509_addr.c b/src/lib/libcrypto/x509/x509_addr.c index 894dfff501..5512f310e1 100644 --- a/src/lib/libcrypto/x509/x509_addr.c +++ b/src/lib/libcrypto/x509/x509_addr.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: x509_addr.c,v 1.23 2021/12/24 01:56:08 tb Exp $ */ | 1 | /* $OpenBSD: x509_addr.c,v 1.24 2021/12/24 02:02:37 tb Exp $ */ |
2 | /* | 2 | /* |
3 | * Contributed to the OpenSSL Project by the American Registry for | 3 | * Contributed to the OpenSSL Project by the American Registry for |
4 | * Internet Numbers ("ARIN"). | 4 | * Internet Numbers ("ARIN"). |
@@ -1493,9 +1493,15 @@ addr_validate_path_internal(X509_STORE_CTX *ctx, STACK_OF(X509)*chain, | |||
1493 | int i, j, ret = 1; | 1493 | int i, j, ret = 1; |
1494 | X509 *x; | 1494 | X509 *x; |
1495 | 1495 | ||
1496 | OPENSSL_assert(chain != NULL && sk_X509_num(chain) > 0); | 1496 | /* We need a non-empty chain to test against. */ |
1497 | OPENSSL_assert(ctx != NULL || ext != NULL); | 1497 | if (sk_X509_num(chain) <= 0) |
1498 | OPENSSL_assert(ctx == NULL || ctx->verify_cb != NULL); | 1498 | goto err; |
1499 | /* We need either a store ctx or an extension to work with. */ | ||
1500 | if (ctx == NULL && ext == NULL) | ||
1501 | goto err; | ||
1502 | /* If there is a store ctx, it needs a verify_cb. */ | ||
1503 | if (ctx != NULL && ctx->verify_cb == NULL) | ||
1504 | goto err; | ||
1499 | 1505 | ||
1500 | /* | 1506 | /* |
1501 | * Figure out where to start. If we don't have an extension to check, | 1507 | * Figure out where to start. If we don't have an extension to check, |
@@ -1588,6 +1594,12 @@ addr_validate_path_internal(X509_STORE_CTX *ctx, STACK_OF(X509)*chain, | |||
1588 | done: | 1594 | done: |
1589 | sk_IPAddressFamily_free(child); | 1595 | sk_IPAddressFamily_free(child); |
1590 | return ret; | 1596 | return ret; |
1597 | |||
1598 | err: | ||
1599 | if (ctx != NULL) | ||
1600 | ctx->error = X509_V_ERR_UNSPECIFIED; | ||
1601 | |||
1602 | return 0; | ||
1591 | } | 1603 | } |
1592 | 1604 | ||
1593 | #undef validation_err | 1605 | #undef validation_err |
@@ -1598,9 +1610,7 @@ addr_validate_path_internal(X509_STORE_CTX *ctx, STACK_OF(X509)*chain, | |||
1598 | int | 1610 | int |
1599 | X509v3_addr_validate_path(X509_STORE_CTX *ctx) | 1611 | X509v3_addr_validate_path(X509_STORE_CTX *ctx) |
1600 | { | 1612 | { |
1601 | if (ctx->chain == NULL || | 1613 | if (sk_X509_num(ctx->chain) <= 0 || ctx->verify_cb == NULL) { |
1602 | sk_X509_num(ctx->chain) == 0 || | ||
1603 | ctx->verify_cb == NULL) { | ||
1604 | ctx->error = X509_V_ERR_UNSPECIFIED; | 1614 | ctx->error = X509_V_ERR_UNSPECIFIED; |
1605 | return 0; | 1615 | return 0; |
1606 | } | 1616 | } |
@@ -1612,12 +1622,12 @@ X509v3_addr_validate_path(X509_STORE_CTX *ctx) | |||
1612 | * Test whether chain covers extension. | 1622 | * Test whether chain covers extension. |
1613 | */ | 1623 | */ |
1614 | int | 1624 | int |
1615 | X509v3_addr_validate_resource_set(STACK_OF(X509)*chain, IPAddrBlocks *ext, | 1625 | X509v3_addr_validate_resource_set(STACK_OF(X509) *chain, IPAddrBlocks *ext, |
1616 | int allow_inheritance) | 1626 | int allow_inheritance) |
1617 | { | 1627 | { |
1618 | if (ext == NULL) | 1628 | if (ext == NULL) |
1619 | return 1; | 1629 | return 1; |
1620 | if (chain == NULL || sk_X509_num(chain) == 0) | 1630 | if (sk_X509_num(chain) <= 0) |
1621 | return 0; | 1631 | return 0; |
1622 | if (!allow_inheritance && X509v3_addr_inherits(ext)) | 1632 | if (!allow_inheritance && X509v3_addr_inherits(ext)) |
1623 | return 0; | 1633 | return 0; |