misc: add address sanitizer heap instrumentation
[vpp.git] / src / vppinfra / vec.c
index 3278828..16372e9 100644 (file)
@@ -58,8 +58,10 @@ vec_resize_allocate_memory (void *v,
     {
       new = clib_mem_alloc_aligned_at_offset (data_bytes, data_align, header_bytes, 1  /* yes, call os_out_of_memory */
        );
-      data_bytes = clib_mem_size (new);
-      clib_memset (new, 0, data_bytes);
+      new_alloc_bytes = clib_mem_size (new);
+      CLIB_MEM_UNPOISON (new + data_bytes, new_alloc_bytes - data_bytes);
+      clib_memset (new, 0, new_alloc_bytes);
+      CLIB_MEM_POISON (new + data_bytes, new_alloc_bytes - data_bytes);
       v = new + header_bytes;
       _vec_len (v) = length_increment;
       return v;
@@ -75,7 +77,10 @@ vec_resize_allocate_memory (void *v,
 
   /* Need to resize? */
   if (data_bytes <= old_alloc_bytes)
-    return v;
+    {
+      CLIB_MEM_UNPOISON (v, data_bytes);
+      return v;
+    }
 
   new_alloc_bytes = (old_alloc_bytes * 3) / 2;
   if (new_alloc_bytes < data_bytes)
@@ -92,6 +97,7 @@ vec_resize_allocate_memory (void *v,
       ("vec_resize fails, length increment %d, data bytes %d, alignment %d",
        length_increment, data_bytes, data_align);
 
+  CLIB_MEM_UNPOISON (old, old_alloc_bytes);
   clib_memcpy_fast (new, old, old_alloc_bytes);
   clib_mem_free (old);
 
@@ -100,7 +106,9 @@ vec_resize_allocate_memory (void *v,
   v = new;
 
   /* Zero new memory. */
+  CLIB_MEM_UNPOISON (new + data_bytes, new_alloc_bytes - data_bytes);
   memset (v + old_alloc_bytes, 0, new_alloc_bytes - old_alloc_bytes);
+  CLIB_MEM_POISON (new + data_bytes, new_alloc_bytes - data_bytes);
 
   return v + header_bytes;
 }