summaryrefslogtreecommitdiffstats
path: root/src/plugins
diff options
context:
space:
mode:
authorJon Loeliger <jdl@netgate.com>2021-06-25 11:24:57 -0400
committerNeale Ranns <neale@graphiant.com>2021-06-26 07:39:10 +0000
commitdabdc197981a49eac54bb43238f4ebd31075622a (patch)
tree6de9dae7e586e0831606096c62dbfe9ccb43a61c /src/plugins
parent905c15319c9a732b1bc785b8ce5a97d5817f26f8 (diff)
vrrp: prevent segfault in multicast join due to missing LL Addr
If an IPv6 Link Layer Address is missing from an interface, treat it as a down interface. While this fails to send a VRRP multicast group join, it also prevents a seg fault. Type: fix Fixes: 39e9428b90bc74d1bb15fc17759c8ef6ad712418 Signed-off-by: Jon Loeliger <jdl@netgate.com> Change-Id: Iebf69bb30604a96de6587655eb872aa818158a56
Diffstat (limited to 'src/plugins')
-rw-r--r--src/plugins/vrrp/vrrp_packet.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/src/plugins/vrrp/vrrp_packet.c b/src/plugins/vrrp/vrrp_packet.c
index 8daee500ece..b470ddeba08 100644
--- a/src/plugins/vrrp/vrrp_packet.c
+++ b/src/plugins/vrrp/vrrp_packet.c
@@ -691,6 +691,11 @@ vrrp_vr_multicast_group_join (vrrp_vr_t * vr)
if (!vnet_sw_interface_is_up (vnm, vr->config.sw_if_index))
return 0;
+ is_ipv6 = vrrp_vr_is_ipv6 (vr);
+
+ if (is_ipv6 && ip6_link_is_enabled (vr->config.sw_if_index) == 0)
+ return 0;
+
if (vlib_buffer_alloc (vm, &bi, n_buffers) != n_buffers)
{
clib_warning ("Buffer allocation failed for %U", format_vrrp_vr_key,
@@ -698,8 +703,6 @@ vrrp_vr_multicast_group_join (vrrp_vr_t * vr)
return -1;
}
- is_ipv6 = vrrp_vr_is_ipv6 (vr);
-
b = vlib_get_buffer (vm, bi);
b->flags |= VNET_BUFFER_F_LOCALLY_ORIGINATED;