vlib:init free list buffers vec 65/16165/2
authorEyal Bari <ebari@cisco.com>
Sun, 25 Nov 2018 13:42:47 +0000 (15:42 +0200)
committerDave Barach <openvpp@barachs.net>
Sun, 25 Nov 2018 15:30:13 +0000 (15:30 +0000)
fixes a problem seen when dhcp proxy uses vlib_buffer_chain_linearize
function which tries to vlib_buffer_alloc zero buffers - which succeeds
if the buffers vector is initialized but otherwise crashes when trying to
update the _vec_len in vlib_buffer_alloc_from_free_list
solved by initializing the free_list buffers vec

Change-Id: I1186d7aac05e54864d72f3f144e1bef8064f8efa
Signed-off-by: Eyal Bari <ebari@cisco.com>
src/vlib/buffer.c
src/vlib/threads.c

index 133d640..3c117c1 100644 (file)
@@ -386,6 +386,8 @@ vlib_buffer_create_free_list_helper (vlib_main_t * vm,
 
   clib_memset (f, 0, sizeof (f[0]));
   f->index = f - vm->buffer_free_list_pool;
+  vec_validate (f->buffers, 0);
+  vec_reset_length (f->buffers);
   f->n_data_bytes = vlib_buffer_round_size (n_data_bytes);
   f->min_n_buffers_each_alloc = VLIB_FRAME_SIZE;
   f->buffer_pool_index = 0;
@@ -412,6 +414,8 @@ vlib_buffer_create_free_list_helper (vlib_main_t * vm,
              wf - wvm->buffer_free_list_pool);
       wf[0] = f[0];
       wf->buffers = 0;
+      vec_validate (wf->buffers, 0);
+      vec_reset_length (wf->buffers);
       wf->n_alloc = 0;
     }
 
index fc2586c..3e184e3 100644 (file)
@@ -882,6 +882,8 @@ start_workers (vlib_main_t * vm)
 
                             fl_clone[0] = fl_orig[0];
                             fl_clone->buffers = 0;
+                            vec_validate(fl_clone->buffers, 0);
+                            vec_reset_length(fl_clone->buffers);
                             fl_clone->n_alloc = 0;
                           }));
 /* *INDENT-ON* */