svm: fix fifo hdr freelist allocation 85/22285/2
authorFlorin Coras <[email protected]>
Thu, 29 Aug 2019 00:12:32 +0000 (17:12 -0700)
committerAndrew Yourtchenko <[email protected]>
Fri, 27 Sep 2019 09:36:42 +0000 (09:36 +0000)
Type: fix

Change-Id: Ia362ad821db1fd506e973e1844cc3ec74703cc17
Signed-off-by: Florin Coras <[email protected]>
(cherry picked from commit 73cad33b56ffc08943e9c0d73ecb14466558baae)

src/svm/fifo_segment.c
src/svm/svm_fifo.c
src/vnet/session/session.c

index eeb2746..dab97a5 100644 (file)
@@ -233,6 +233,10 @@ fs_try_alloc_fifo_freelist_multi_chunk (fifo_segment_t * fs, u32 data_bytes)
        return 0;
       memset (f, 0, sizeof (*f));
     }
+  else
+    {
+      fsh->free_fifos = f->next;
+    }
 
   fl_index = fs_freelist_for_size (data_bytes) - 1;
   vec_validate_init_empty (fsh->free_chunks, fl_index, 0);
index b6f0df7..6bd6f91 100644 (file)
@@ -400,7 +400,7 @@ svm_fifo_init (svm_fifo_t * f, u32 size)
   f->ooos_list_head = OOO_SEGMENT_INVALID_INDEX;
   f->segment_index = SVM_FIFO_INVALID_INDEX;
   f->refcnt = 1;
-  f->flags = 0;
+  f->head = f->tail = f->flags = 0;
   f->head_chunk = f->tail_chunk = f->ooo_enq = f->ooo_deq = f->start_chunk;
 }
 
index 4529245..c0452ca 100644 (file)
@@ -63,6 +63,7 @@ session_send_evt_to_thread (void *data, void *args, u32 thread_index,
       break;
     case SESSION_IO_EVT_BUILTIN_TX:
     case SESSION_CTRL_EVT_CLOSE:
+    case SESSION_CTRL_EVT_RESET:
       evt->session_handle = session_handle ((session_t *) data);
       break;
     default:
@@ -125,6 +126,7 @@ session_add_self_custom_tx_evt (transport_connection_t * tc, u8 has_prio)
 
   s = session_get (tc->s_index, tc->thread_index);
   ASSERT (s->thread_index == vlib_get_thread_index ());
+  ASSERT (s->session_state < SESSION_STATE_TRANSPORT_DELETED);
   if (!(s->flags & SESSION_F_CUSTOM_TX))
     {
       s->flags |= SESSION_F_CUSTOM_TX;