From: Denis Ovsienko Date: Mon, 26 Sep 2011 09:17:52 +0000 (+0400) Subject: ospfd: CVE-2011-3325 part 1 (OSPF header underrun) X-Git-Tag: frr-2.0-rc1~2060 X-Git-Url: https://git.puffer.fish/?a=commitdiff_plain;h=61ab0301606053192f45c188bc48afc837518770;p=mirror%2Ffrr.git ospfd: CVE-2011-3325 part 1 (OSPF header underrun) This vulnerability (CERT-FI #514838) was reported by CROSS project. When only 14 first bytes of a Hello packet is delivered, ospfd crashes. * ospf_packet.c * ospf_read(): add size check --- diff --git a/ospfd/ospf_packet.c b/ospfd/ospf_packet.c index be137d9116..57278788dc 100644 --- a/ospfd/ospf_packet.c +++ b/ospfd/ospf_packet.c @@ -2430,10 +2430,19 @@ ospf_read (struct thread *thread) return 0; } - /* Adjust size to message length. */ + /* Advance from IP header to OSPF header (iph->ip_hl has been verified + by ospf_recv_packet() to be correct). */ stream_forward_getp (ibuf, iph->ip_hl * 4); - - /* Get ospf packet header. */ + + /* Make sure the OSPF header is really there. */ + if (stream_get_endp (ibuf) - stream_get_getp (ibuf) < OSPF_HEADER_SIZE) + { + zlog_debug ("ospf_read: ignored OSPF packet with undersized (%u bytes) header", + stream_get_endp (ibuf) - stream_get_getp (ibuf)); + return -1; + } + + /* Now it is safe to access all fields of OSPF packet header. */ ospfh = (struct ospf_header *) STREAM_PNT (ibuf); /* associate packet with ospf interface */