Validate AFIs before sorting in X509v3_adr_canonize()
authortb <tb@openbsd.org>
Tue, 28 Dec 2021 20:58:05 +0000 (20:58 +0000)
committertb <tb@openbsd.org>
Tue, 28 Dec 2021 20:58:05 +0000 (20:58 +0000)
Again, we're dealing with necessarily not fully validated data here,
so a check up front seems prudent.

ok jsing

lib/libcrypto/x509/x509_addr.c

index 3686d6a..225f961 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: x509_addr.c,v 1.43 2021/12/28 20:50:37 tb Exp $ */
+/*     $OpenBSD: x509_addr.c,v 1.44 2021/12/28 20:58:05 tb Exp $ */
 /*
  * Contributed to the OpenSSL Project by the American Registry for
  * Internet Numbers ("ARIN").
@@ -1274,10 +1274,16 @@ IPAddressOrRanges_canonize(IPAddressOrRanges *aors, const unsigned afi)
 int
 X509v3_addr_canonize(IPAddrBlocks *addr)
 {
+       unsigned int afi;
        int i;
 
        for (i = 0; i < sk_IPAddressFamily_num(addr); i++) {
                IPAddressFamily *f = sk_IPAddressFamily_value(addr, i);
+
+               /* Check AFI/SAFI here - IPAddressFamily_cmp() can't error. */
+               if ((afi = X509v3_addr_get_afi(f)) == 0)
+                       return 0;
+
                if (f->ipAddressChoice->type ==
                    IPAddressChoice_addressesOrRanges &&
                    !IPAddressOrRanges_canonize(f->ipAddressChoice->u.addressesOrRanges,