summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortb <>2021-12-24 02:12:31 +0000
committertb <>2021-12-24 02:12:31 +0000
commit5f20e4d06b4c24bf12b9027a91e9d8a3de6b6c62 (patch)
tree4fc7428ab504e6ecb1a7d6290242c0a0bb113294
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
-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 }