summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authortb <>2021-12-24 02:02:37 +0000
committertb <>2021-12-24 02:02:37 +0000
commit2a6ad3d378214786ed277d168beba46710d74207 (patch)
tree7f0b1ddac23fd280bfd1d94d754267f5d34c7852 /src
parent41baa1b274bc3870ce7bbce17b23f6e0820a1a93 (diff)
downloadopenbsd-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.c28
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,
1598int 1610int
1599X509v3_addr_validate_path(X509_STORE_CTX *ctx) 1611X509v3_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 */
1614int 1624int
1615X509v3_addr_validate_resource_set(STACK_OF(X509)*chain, IPAddrBlocks *ext, 1625X509v3_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;