Make tcp/udp/icmp compute checksum safer for buffer-chain case 65/18765/3
authorJohn Lo <loj@cisco.com>
Tue, 9 Apr 2019 14:23:56 +0000 (10:23 -0400)
committerFlorin Coras <florin.coras@gmail.com>
Wed, 10 Apr 2019 00:35:35 +0000 (00:35 +0000)
Change-Id: I046e481a67fbeffdaa8504c8d77d232b986a61ee
Signed-off-by: John Lo <loj@cisco.com>
src/vnet/ip/ip4_forward.c
src/vnet/ip/ip6_forward.c

index 4a2d413..85e6607 100644 (file)
@@ -1174,7 +1174,7 @@ ip4_tcp_udp_compute_checksum (vlib_main_t * vm, vlib_buffer_t * p0,
       ASSERT (p0->flags & VLIB_BUFFER_NEXT_PRESENT);
       p0 = vlib_get_buffer (vm, p0->next_buffer);
       data_this_buffer = vlib_buffer_get_current (p0);
-      n_this_buffer = p0->current_length;
+      n_this_buffer = clib_min (p0->current_length, n_bytes_left);
     }
 
   sum16 = ~ip_csum_fold (sum0);
index f1f291d..6df3d4b 100644 (file)
@@ -1011,7 +1011,7 @@ ip6_tcp_udp_icmp_compute_checksum (vlib_main_t * vm, vlib_buffer_t * p0,
        }
       p0 = vlib_get_buffer (vm, p0->next_buffer);
       data_this_buffer = vlib_buffer_get_current (p0);
-      n_this_buffer = p0->current_length;
+      n_this_buffer = clib_min (p0->current_length, n_bytes_left);
     }
 
   sum16 = ~ip_csum_fold (sum0);