]> git.puffer.fish Git - mirror/frr.git/commitdiff
bgpd: relax ORF capability length handling
authorDavid Lamparter <equinox@opensourcerouting.org>
Wed, 23 Jan 2013 04:50:24 +0000 (05:50 +0100)
committerDavid Lamparter <equinox@opensourcerouting.org>
Fri, 1 Feb 2013 16:55:04 +0000 (17:55 +0100)
commit fe9bb64... "bgpd: CVE-2012-1820, DoS in bgp_capability_orf()"
made the length test in bgp_capability_orf_entry() stricter and is now
causing us to refuse (with CEASE) ORF capabilites carrying any excess
data.  This does not conform to the robustness principle as laid out by
RFC1122 ("be liberal in what you accept").

Even worse, RFC5291 is quite unclear on how to use the ORF capability
with multiple AFI/SAFIs.  It can be interpreted as either "use one
instance, stuff everything in" but also as "use multiple instances".
So, if not for applying robustness, we end up clearing sessions from
implementations going by the former interpretation.  (or if anyone dares
add a byte of padding...)

Cc: Denis Ovsienko <infrastation@yandex.ru>
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
bgpd/bgp_open.c

index af711cc8ceba87bea72958983bca69b7b138767f..7bf350165b670028591465cdfa4713bc4d1db3a0 100644 (file)
@@ -230,7 +230,7 @@ bgp_capability_orf_entry (struct peer *peer, struct capability_header *hdr)
     }
   
   /* validate number field */
-  if (sizeof (struct capability_orf_entry) + (entry.num * 2) != hdr->length)
+  if (sizeof (struct capability_orf_entry) + (entry.num * 2) > hdr->length)
     {
       zlog_info ("%s ORF Capability entry length error,"
                  " Cap length %u, num %u",