X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fplugins%2Fvrrp%2Fnode.c;h=3355198efe2c1c6120f1e5ab3a9961096b11607b;hb=269549491ae6c8d9c35d6b4fa9441ad15e6b82f0;hp=b819919e4285cfbbc0e8ef730065366d5e72dd7d;hpb=39e9428b90bc74d1bb15fc17759c8ef6ad712418;p=vpp.git diff --git a/src/plugins/vrrp/node.c b/src/plugins/vrrp/node.c index b819919e428..3355198efe2 100644 --- a/src/plugins/vrrp/node.c +++ b/src/plugins/vrrp/node.c @@ -617,7 +617,8 @@ vrrp_input_inline (vlib_main_t * vm, vlib_node_runtime_t * node, } /* Mandatory - packet must be complete */ - if (b0->current_length < sizeof (*vrrp0) + vrrp0->n_addrs * addr_len) + if (b0->current_length < sizeof (*vrrp0) + + ((u32) vrrp0->n_addrs) * addr_len) { error0 = VRRP_ERROR_INCOMPLETE_PKT; goto trace; @@ -661,12 +662,13 @@ vrrp_input_inline (vlib_main_t * vm, vlib_node_runtime_t * node, if (b0->flags & VLIB_BUFFER_IS_TRACED) { vrrp_trace_t *t = vlib_add_trace (vm, node, b0, sizeof (*t)); + size_t addr_len = (is_ipv6 ? 16 : 4); t->sw_if_index = vnet_buffer(b0)->sw_if_index[VLIB_RX]; t->is_ipv6 = is_ipv6; clib_memcpy_fast (&t->vrrp, vrrp0, sizeof (*vrrp0)); clib_memcpy_fast (t->addrs, (void *) (vrrp0 + 1), - vrrp0->n_addrs * (is_ipv6 ? 16 : 4)); + (size_t) vrrp0->n_addrs * addr_len); } /* always drop, never forward or reply here */