summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authortb <>2021-12-24 02:12:31 +0000
committertb <>2021-12-24 02:12:31 +0000
commit5f20e4d06b4c24bf12b9027a91e9d8a3de6b6c62 (patch)
tree4fc7428ab504e6ecb1a7d6290242c0a0bb113294 /src
parenteb90e56d8fe112f145d3661057d6bc4d40d45aec (diff)
downloadopenbsd-5f20e4d06b4c24bf12b9027a91e9d8a3de6b6c62.tar.gz
openbsd-5f20e4d06b4c24bf12b9027a91e9d8a3de6b6c62.tar.bz2
openbsd-5f20e4d06b4c24bf12b9027a91e9d8a3de6b6c62.zip
Turn asserts in ASIdentifierChoice_canonize() into error checks
The first assert ensure that a stack that was just sorted in a stronger sense is sorted in a weak sense and the second assert ensures that the result of the canonization procedure is canonical. All callers check for error, so these asserts don't do anything useful. ok jsing
Diffstat (limited to 'src')
-rw-r--r--src/lib/libcrypto/x509/x509_asid.c37
1 files changed, 25 insertions, 12 deletions
diff --git a/src/lib/libcrypto/x509/x509_asid.c b/src/lib/libcrypto/x509/x509_asid.c
index 808dad7552..216fd610c2 100644
--- a/src/lib/libcrypto/x509/x509_asid.c
+++ b/src/lib/libcrypto/x509/x509_asid.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: x509_asid.c,v 1.22 2021/12/24 02:07:37 tb Exp $ */ 1/* $OpenBSD: x509_asid.c,v 1.23 2021/12/24 02:12:31 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").
@@ -649,7 +649,8 @@ ASIdentifierChoice_canonize(ASIdentifierChoice *choice)
649 /* 649 /*
650 * Make sure we're properly sorted (paranoia). 650 * Make sure we're properly sorted (paranoia).
651 */ 651 */
652 OPENSSL_assert(ASN1_INTEGER_cmp(a_min, b_min) <= 0); 652 if (ASN1_INTEGER_cmp(a_min, b_min) > 0)
653 goto done;
653 654
654 /* 655 /*
655 * Punt inverted ranges. 656 * Punt inverted ranges.
@@ -736,7 +737,8 @@ ASIdentifierChoice_canonize(ASIdentifierChoice *choice)
736 } 737 }
737 738
738 /* Paranoia */ 739 /* Paranoia */
739 OPENSSL_assert(ASIdentifierChoice_is_canonical(choice)); 740 if (!ASIdentifierChoice_is_canonical(choice))
741 goto done;
740 742
741 ret = 1; 743 ret = 1;
742 744
@@ -977,16 +979,22 @@ X509v3_asid_subset(ASIdentifiers *a, ASIdentifiers *b)
977 * Core code for RFC 3779 3.3 path validation. 979 * Core code for RFC 3779 3.3 path validation.
978 */ 980 */
979static int 981static int
980asid_validate_path_internal(X509_STORE_CTX *ctx, STACK_OF(X509)*chain, 982asid_validate_path_internal(X509_STORE_CTX *ctx, STACK_OF(X509) *chain,
981 ASIdentifiers *ext) 983 ASIdentifiers *ext)
982{ 984{
983 ASIdOrRanges *child_as = NULL, *child_rdi = NULL; 985 ASIdOrRanges *child_as = NULL, *child_rdi = NULL;
984 int i, ret = 1, inherit_as = 0, inherit_rdi = 0; 986 int i, ret = 1, inherit_as = 0, inherit_rdi = 0;
985 X509 *x; 987 X509 *x;
986 988
987 OPENSSL_assert(chain != NULL && sk_X509_num(chain) > 0); 989 /* We need a non-empty chain to test against. */
988 OPENSSL_assert(ctx != NULL || ext != NULL); 990 if (sk_X509_num(chain) <= 0)
989 OPENSSL_assert(ctx == NULL || ctx->verify_cb != NULL); 991 goto err;
992 /* We need either a store ctx or an extension to work with. */
993 if (ctx == NULL && ext == NULL)
994 goto err;
995 /* If there is a store ctx, it needs a verify_cb. */
996 if (ctx != NULL && ctx->verify_cb == NULL)
997 goto err;
990 998
991 /* 999 /*
992 * Figure out where to start. If we don't have an extension to 1000 * Figure out where to start. If we don't have an extension to
@@ -1031,7 +1039,6 @@ asid_validate_path_internal(X509_STORE_CTX *ctx, STACK_OF(X509)*chain,
1031 */ 1039 */
1032 for (i++; i < sk_X509_num(chain); i++) { 1040 for (i++; i < sk_X509_num(chain); i++) {
1033 x = sk_X509_value(chain, i); 1041 x = sk_X509_value(chain, i);
1034 OPENSSL_assert(x != NULL);
1035 1042
1036 if (x->rfc3779_asid == NULL) { 1043 if (x->rfc3779_asid == NULL) {
1037 if (child_as != NULL || child_rdi != NULL) 1044 if (child_as != NULL || child_rdi != NULL)
@@ -1078,7 +1085,9 @@ asid_validate_path_internal(X509_STORE_CTX *ctx, STACK_OF(X509)*chain,
1078 /* 1085 /*
1079 * Trust anchor can't inherit. 1086 * Trust anchor can't inherit.
1080 */ 1087 */
1081 OPENSSL_assert(x != NULL); 1088
1089 if (x == NULL)
1090 goto err;
1082 1091
1083 if (x->rfc3779_asid != NULL) { 1092 if (x->rfc3779_asid != NULL) {
1084 if (x->rfc3779_asid->asnum != NULL && 1093 if (x->rfc3779_asid->asnum != NULL &&
@@ -1091,6 +1100,12 @@ asid_validate_path_internal(X509_STORE_CTX *ctx, STACK_OF(X509)*chain,
1091 1100
1092 done: 1101 done:
1093 return ret; 1102 return ret;
1103
1104 err:
1105 if (ctx != NULL)
1106 ctx->error = X509_V_ERR_UNSPECIFIED;
1107
1108 return 0;
1094} 1109}
1095 1110
1096#undef validation_err 1111#undef validation_err
@@ -1101,9 +1116,7 @@ asid_validate_path_internal(X509_STORE_CTX *ctx, STACK_OF(X509)*chain,
1101int 1116int
1102X509v3_asid_validate_path(X509_STORE_CTX *ctx) 1117X509v3_asid_validate_path(X509_STORE_CTX *ctx)
1103{ 1118{
1104 if (ctx->chain == NULL || 1119 if (sk_X509_num(ctx->chain) <= 0 || ctx->verify_cb == NULL) {
1105 sk_X509_num(ctx->chain) == 0 ||
1106 ctx->verify_cb == NULL) {
1107 ctx->error = X509_V_ERR_UNSPECIFIED; 1120 ctx->error = X509_V_ERR_UNSPECIFIED;
1108 return 0; 1121 return 0;
1109 } 1122 }