]> git.proxmox.com Git - ovs.git/commitdiff
flow: Fix buffer overread for crafted IPv6 packets.
authorBen Pfaff <blp@ovn.org>
Mon, 9 Jul 2018 20:04:03 +0000 (13:04 -0700)
committerBen Pfaff <blp@ovn.org>
Tue, 10 Jul 2018 03:54:22 +0000 (20:54 -0700)
The ipv6_sanity_check() function implemented a check for IPv6 payload
length wrong: ip6_plen is the payload length but this function checked
whether it was longer than the total length of IPv6 header plus payload.
This meant that a packet with a crafted ip6_plen could result in a buffer
overread of up to the length of an IPv6 header (40 bytes).

The kernel datapath flow extraction code does not obviously have a similar
problem.

Reported-at: https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=9287
Signed-off-by: Ben Pfaff <blp@ovn.org>
Acked-by: Darrell Ball <dlu998@gmail.com>
lib/flow.c

index a785e63a82f38da726761d9a1365a39b79e76515..76a8b9aaeaae26c39e6a105937ae7d8ad2cc10de 100644 (file)
@@ -677,7 +677,7 @@ ipv6_sanity_check(const struct ovs_16aligned_ip6_hdr *nh, size_t size)
     }
 
     plen = ntohs(nh->ip6_plen);
-    if (OVS_UNLIKELY(plen > size)) {
+    if (OVS_UNLIKELY(plen + IPV6_HEADER_LEN > size)) {
         return false;
     }
     /* Jumbo Payload option not supported yet. */