vppinfra: annotate pool_dup() for asan

When using AddressSanitizer, pool objects are poisoned, but pool_dup()
deep copy is ok.

Type: fix

Change-Id: Id801c4ab35666474a297d885c4b92878e44feab6
Signed-off-by: Benoît Ganne <bganne@cisco.com>
diff --git a/src/vppinfra/pool.h b/src/vppinfra/pool.h
index 6f16e61..68a859e 100644
--- a/src/vppinfra/pool.h
+++ b/src/vppinfra/pool.h
@@ -373,28 +373,30 @@
  * @param A alignment (may be zero)
  * @return copy of pool
  */
-#define pool_dup_aligned(P,A)						\
-({									\
-  typeof (P) _pool_var (new) = 0;					\
-  pool_header_t * _pool_var (ph), * _pool_var (new_ph);			\
-  u32 _pool_var (n) = pool_len (P);					\
-  if ((P))								\
-    {									\
-      _pool_var (new) = _vec_resize (_pool_var (new), _pool_var (n),	\
-                                     _pool_var (n) * sizeof ((P)[0]), 	\
-                                     pool_aligned_header_bytes, (A));	\
-      clib_memcpy_fast (_pool_var (new), (P), 				\
-                        _pool_var (n) * sizeof ((P)[0]));		\
-      _pool_var (ph) = pool_header (P);					\
-      _pool_var (new_ph) = pool_header (_pool_var (new));		\
-      _pool_var (new_ph)->free_bitmap = 				\
-        clib_bitmap_dup (_pool_var (ph)->free_bitmap);			\
-      _pool_var (new_ph)->free_indices = 				\
-        vec_dup (_pool_var (ph)->free_indices);				\
-      _pool_var (new_ph)->max_elts = _pool_var (ph)->max_elts;		\
-    }									\
-  _pool_var (new);							\
-})
+#define pool_dup_aligned(P, A)                                                \
+  ({                                                                          \
+    typeof (P) _pool_var (new) = 0;                                           \
+    pool_header_t *_pool_var (ph), *_pool_var (new_ph);                       \
+    u32 _pool_var (n) = pool_len (P);                                         \
+    if ((P))                                                                  \
+      {                                                                       \
+	_pool_var (new) = _vec_resize (_pool_var (new), _pool_var (n),        \
+				       _pool_var (n) * sizeof ((P)[0]),       \
+				       pool_aligned_header_bytes, (A));       \
+	CLIB_MEM_OVERFLOW_PUSH ((P), _pool_var (n) * sizeof ((P)[0]));        \
+	clib_memcpy_fast (_pool_var (new), (P),                               \
+			  _pool_var (n) * sizeof ((P)[0]));                   \
+	CLIB_MEM_OVERFLOW_POP ();                                             \
+	_pool_var (ph) = pool_header (P);                                     \
+	_pool_var (new_ph) = pool_header (_pool_var (new));                   \
+	_pool_var (new_ph)->free_bitmap =                                     \
+	  clib_bitmap_dup (_pool_var (ph)->free_bitmap);                      \
+	_pool_var (new_ph)->free_indices =                                    \
+	  vec_dup (_pool_var (ph)->free_indices);                             \
+	_pool_var (new_ph)->max_elts = _pool_var (ph)->max_elts;              \
+      }                                                                       \
+    _pool_var (new);                                                          \
+  })
 
 /**
  * Return copy of pool without alignment