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);