vlib: use index to free suspended frame 12/15812/2
authorFlorin Coras <fcoras@cisco.com>
Thu, 8 Nov 2018 04:46:38 +0000 (20:46 -0800)
committerDamjan Marion <dmarion@me.com>
Thu, 8 Nov 2018 11:20:06 +0000 (11:20 +0000)
Avoids crash if suspended_process_frames grows.

Change-Id: Id26ef0dd0dd001b997c531c4dec004e7e7989670
Signed-off-by: Florin Coras <fcoras@cisco.com>
src/vlib/main.c

index df7c2f1..1b9eb39 100644 (file)
@@ -1416,9 +1416,8 @@ dispatch_suspended_process (vlib_main_t * vm,
   ASSERT (p->flags & (VLIB_PROCESS_IS_SUSPENDED_WAITING_FOR_CLOCK
                      | VLIB_PROCESS_IS_SUSPENDED_WAITING_FOR_EVENT));
 
-  pf =
-    pool_elt_at_index (nm->suspended_process_frames,
-                      p->suspended_process_frame_index);
+  pf = pool_elt_at_index (nm->suspended_process_frames,
+                         p->suspended_process_frame_index);
 
   node_runtime = &p->node_runtime;
   node = vlib_get_node (vm, node_runtime->node_index);
@@ -1454,8 +1453,9 @@ dispatch_suspended_process (vlib_main_t * vm,
   else
     {
       p->flags &= ~VLIB_PROCESS_IS_RUNNING;
+      pool_put_index (nm->suspended_process_frames,
+                     p->suspended_process_frame_index);
       p->suspended_process_frame_index = ~0;
-      pool_put (nm->suspended_process_frames, pf);
     }
 
   t = clib_cpu_time_now ();