ip-neighbor: ip_neighbor_advertise() handles null 20/24120/1
authorMatthew Smith <mgsmith@netgate.com>
Mon, 23 Dec 2019 22:25:11 +0000 (16:25 -0600)
committerMatthew Smith <mgsmith@netgate.com>
Tue, 24 Dec 2019 01:37:38 +0000 (19:37 -0600)
Type: fix
Fixes: cbe25aab3b

ip_neighbor_advertise() was calling one of both of
ip4_neighbor_advertise() and/or ip6_neighbor_advertise() with
&addr->{ip4|ip6} as an argument. If addr is null, which is likely
a requirement when the type is IP46_TYPE_BOTH, this results in a
SEGV.

Check addr and pass a pointer to one of it's members if it is not
null, otherwise pass null.

Change-Id: I6261bb8fe947365fe3d6c58788ea27d5cb28ff05
Signed-off-by: Matthew Smith <mgsmith@netgate.com>
src/vnet/ip-neighbor/ip_neighbor.c

index 11684eb..ceec373 100644 (file)
@@ -976,9 +976,9 @@ ip_neighbor_advertise (vlib_main_t * vm,
   vnet_main_t *vnm = vnet_get_main ();
 
   if (type == IP46_TYPE_IP4 || type == IP46_TYPE_BOTH)
-    ip4_neighbor_advertise (vm, vnm, sw_if_index, &addr->ip4);
+    ip4_neighbor_advertise (vm, vnm, sw_if_index, (addr) ? &addr->ip4 : NULL);
   if (type == IP46_TYPE_IP6 || type == IP46_TYPE_BOTH)
-    ip6_neighbor_advertise (vm, vnm, sw_if_index, &addr->ip6);
+    ip6_neighbor_advertise (vm, vnm, sw_if_index, (addr) ? &addr->ip6 : NULL);
 }
 
 void