avf: crash on avf interface delete 34/31934/1
authorSteven Luong <sluong@cisco.com>
Thu, 8 Apr 2021 16:31:27 +0000 (09:31 -0700)
committerSteven Luong <sluong@cisco.com>
Thu, 8 Apr 2021 16:39:26 +0000 (09:39 -0700)
When deleting an avf interface which is not the very first interface
that was created (dev_instance == 0), VPP crashes.

The reason is every avf interface delete always removes the very first
device instance due to ad->dev_instance was wiped out prior to the
statement pool_put_index (am->devices, ad->dev_instance)

Type: fix

Signed-off-by: Steven Luong <sluong@cisco.com>
Change-Id: I69bd1588aab9a176f8eef46be7aa5063f5d29482

src/plugins/avf/device.c

index c58b512..14ad47c 100644 (file)
@@ -1469,6 +1469,7 @@ avf_delete_if (vlib_main_t * vm, avf_device_t * ad, int with_barrier)
   vnet_main_t *vnm = vnet_get_main ();
   avf_main_t *am = &avf_main;
   int i;
+  u32 dev_instance;
 
   ad->flags &= ~AVF_DEVICE_F_ADMIN_UP;
 
@@ -1523,8 +1524,9 @@ avf_delete_if (vlib_main_t * vm, avf_device_t * ad, int with_barrier)
   vec_free (ad->name);
 
   clib_error_free (ad->error);
+  dev_instance = ad->dev_instance;
   clib_memset (ad, 0, sizeof (*ad));
-  pool_put_index (am->devices, ad->dev_instance);
+  pool_put_index (am->devices, dev_instance);
   clib_mem_free (ad);
 }