Hi all,

The ASN.1 profile in draft-ietf-sidrops-rfc6482bis section 4
https://datatracker.ietf.org/doc/html/draft-ietf-sidrops-rfc6482bis-01
specifies that there must not be more than 2 ipAddrBlocks (one for IPv4,
and one for IPv6). This changeset enforces that constraint. Compatible
with all published ROAs.

OK?

Kind regards,

Job

Index: roa.c
===================================================================
RCS file: /cvs/src/usr.sbin/rpki-client/roa.c,v
retrieving revision 1.55
diff -u -p -r1.55 roa.c
--- roa.c       4 Nov 2022 09:43:13 -0000       1.55
+++ roa.c       9 Nov 2022 18:04:59 -0000
@@ -111,6 +111,7 @@ roa_parse_econtent(const unsigned char *
        long                             maxlen;
        struct ip_addr                   ipaddr;
        struct roa_ip                   *res;
+       int                              ipaddrblocksz;
        int                              i, j, rc = 0;
 
        if ((roa = d2i_RouteOriginAttestation(NULL, &d, dsz)) == NULL) {
@@ -128,7 +129,14 @@ roa_parse_econtent(const unsigned char *
                goto out;
        }
 
-       for (i = 0; i < sk_ROAIPAddressFamily_num(roa->ipAddrBlocks); i++) {
+       ipaddrblocksz = sk_ROAIPAddressFamily_num(roa->ipAddrBlocks);
+       if (ipaddrblocksz > 2) {
+               warnx("%s: draft-rfc6482bis: too many ipAddrBlocks (got %i, "
+                   "expected 1 or 2)", p->fn, ipaddrblocksz);
+               goto out;
+       }
+
+       for (i = 0; i < ipaddrblocksz; i++) {
                addrfam = sk_ROAIPAddressFamily_value(roa->ipAddrBlocks, i);
                addrs = addrfam->addresses;
                addrsz = sk_ROAIPAddress_num(addrs);

Reply via email to