Fix crash on vhost-user deletion - VPP-571 17/4517/3
authorWojciech Dec <wdec@cisco.com>
Tue, 3 Jan 2017 09:27:03 +0000 (10:27 +0100)
committerWojciech Dec <wdec@cisco.com>
Tue, 3 Jan 2017 09:27:22 +0000 (10:27 +0100)
Fixes VPP-571.
VPP crashes when deleting created vhost interfaces
which have not been configured with L3 or
bridge-domain.

Change-Id: I7fe6f2e52d4d5d77ec3c122758aa4bf43250b1d1
Signed-off-by: Wojciech Dec <wdec@cisco.com>
src/vnet/interface.c

index 78610ed..9454ac1 100644 (file)
@@ -631,15 +631,18 @@ vnet_delete_sw_interface (vnet_main_t * vnm, u32 sw_if_index)
   vnet_sw_interface_t *sw =
     pool_elt_at_index (im->sw_interfaces, sw_if_index);
 
-  /* Make sure the interface is in L3 mode (removed from L2 BD or XConnect) */
+  /* Check if the interface has config and is removed from L2 BD or XConnect */
   vlib_main_t *vm = vlib_get_main ();
   l2_input_config_t *config;
-  config = vec_elt_at_index (l2input_main.configs, sw_if_index);
-  if (config->xconnect)
-    set_int_l2_mode (vm, vnm, MODE_L3, config->output_sw_if_index, 0, 0, 0,
-                    0);
-  if (config->xconnect || config->bridge)
-    set_int_l2_mode (vm, vnm, MODE_L3, sw_if_index, 0, 0, 0, 0);
+  if (sw_if_index < vec_len (l2input_main.configs))
+    {
+      config = vec_elt_at_index (l2input_main.configs, sw_if_index);
+      if (config->xconnect)
+       set_int_l2_mode (vm, vnm, MODE_L3, config->output_sw_if_index, 0, 0,
+                        0, 0);
+      if (config->xconnect || config->bridge)
+       set_int_l2_mode (vm, vnm, MODE_L3, sw_if_index, 0, 0, 0, 0);
+    }
 
   /* Bring down interface in case it is up. */
   if (sw->flags != 0)