Fix a long-latent bi=0 bug in vlib_buffer_add_data 93/11193/2
authorDave Barach <dave@barachs.net>
Fri, 16 Mar 2018 19:21:35 +0000 (15:21 -0400)
committerDamjan Marion <dmarion.lists@gmail.com>
Fri, 16 Mar 2018 20:28:13 +0000 (20:28 +0000)
Change vlib_buffer_add_data() so it interprets ~0 to mean please
allocate a new buffer, instead of 0. Fixed a couple of calls to pass
~0 instead of 0.

Zero has always been a valid buffer index, we never happened to
actually use it until recent buffer allocator changes.

The presenting symptom: ASSERT failure when running "make
TEST=test_mpls test-debug"

Change-Id: Ic909913c1d464b3434d6d47e0c58f978806854d5
Signed-off-by: Dave Barach <dave@barachs.net>
src/vlib/buffer.c
src/vlib/buffer_serialize.c
src/vnet/srp/node.c

index 6caca72..3f90f5a 100644 (file)
@@ -817,7 +817,7 @@ vlib_buffer_add_data (vlib_main_t * vm,
   void *d;
 
   bi = buffer_index;
-  if (bi == 0
+  if (bi == ~0
       && 1 != vlib_buffer_alloc_from_free_list (vm, &bi, 1, free_list_index))
     goto out_of_buffers;
 
index 96a5f0a..48dcce3 100644 (file)
@@ -216,7 +216,7 @@ serialize_close_vlib_buffer (serialize_main_t * m)
     {
       sm->last_buffer
        = vlib_buffer_add_data (sm->vlib_main, sm->tx.free_list_index,
-                               sm->last_buffer == ~0 ? 0 : sm->last_buffer,
+                               sm->last_buffer,
                                s->overflow_buffer,
                                vec_len (s->overflow_buffer));
       _vec_len (s->overflow_buffer) = 0;
index 9123c4c..acb770e 100644 (file)
@@ -334,7 +334,7 @@ srp_topology_packet (vlib_main_t * vm, u32 sw_if_index, u8 ** contents)
     u32 bi;
 
     bi = vlib_buffer_add_data (vm, VLIB_BUFFER_DEFAULT_FREE_LIST_INDEX,
-                              /* buffer to append to */ 0,
+                              /* buffer to append to */ ~0,
                               *contents, vec_len (*contents));
     b = vlib_get_buffer (vm, bi);
     vnet_buffer (b)->sw_if_index[VLIB_RX] = vnet_buffer (b)->sw_if_index[VLIB_TX] = sw_if_index;
@@ -621,7 +621,7 @@ static void tx_ips_packet (srp_interface_t * si,
                                              sizeof (i[0]) - STRUCT_OFFSET_OF (srp_ips_header_t, control)));
 
   bi = vlib_buffer_add_data (vm, VLIB_BUFFER_DEFAULT_FREE_LIST_INDEX,
-                            /* buffer to append to */ 0,
+                            /* buffer to append to */ ~0,
                             i, sizeof (i[0]));
 
   /* FIXME trace. */