From 269549491ae6c8d9c35d6b4fa9441ad15e6b82f0 Mon Sep 17 00:00:00 2001 From: Matthew Smith Date: Thu, 20 Feb 2020 08:58:15 -0600 Subject: [PATCH] vrrp: fix coverity errors Type: fix Fixes: 39e9428b90 Fix warnings about potential problems with an implicit type cast and a null pointer dereference. Change-Id: I8c8d220e79ba45b62ba783cfe53cb49eef175fc8 Signed-off-by: Matthew Smith --- src/plugins/vrrp/node.c | 3 ++- src/plugins/vrrp/vrrp_packet.c | 10 ++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/plugins/vrrp/node.c b/src/plugins/vrrp/node.c index 34d082ec2ff..3355198efe2 100644 --- a/src/plugins/vrrp/node.c +++ b/src/plugins/vrrp/node.c @@ -662,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 */ diff --git a/src/plugins/vrrp/vrrp_packet.c b/src/plugins/vrrp/vrrp_packet.c index f624b1876c3..6b0d4c96c2d 100644 --- a/src/plugins/vrrp/vrrp_packet.c +++ b/src/plugins/vrrp/vrrp_packet.c @@ -282,6 +282,16 @@ vrrp_adv_send (vrrp_vr_t * vr, int shutdown) if (is_unicast) n_buffers = vec_len (vr->config.peer_addrs); + if (n_buffers < 1) + { + /* A unicast VR will not start without peers added so this should + * not happen. Just avoiding a crash if it happened somehow. + */ + clib_warning ("Unicast VR configuration corrupted for %U", + format_vrrp_vr_key, vr); + return -1; + } + vec_validate (bi, n_buffers - 1); if (vlib_buffer_alloc (vm, bi, n_buffers) != n_buffers) { -- 2.16.6