misc: add address sanitizer heap instrumentation
[vpp.git] / src / vppinfra / hash.c
index b6f0901..6115b0c 100644 (file)
@@ -109,7 +109,7 @@ zap64 (u64 x, word n)
  * The above is true *unless* the extra bytes cross a page boundary
  * into unmapped or no-access space, hence the boundary crossing check.
  */
-static inline u64 __attribute__ ((no_sanitize_address))
+static inline u64
 hash_memory64 (void *p, word n_bytes, u64 state)
 {
   u64 *q = p;
@@ -154,7 +154,9 @@ hash_memory64 (void *p, word n_bytes, u64 state)
        {
          if (PREDICT_TRUE (page_boundary_crossing == 0))
            c +=
-             zap64 (clib_mem_unaligned (q + 2, u64), n % sizeof (u64)) << 8;
+             zap64 (CLIB_MEM_OVERFLOW
+                    (clib_mem_unaligned (q + 2, u64), q + 2, sizeof (u64)),
+                    n % sizeof (u64)) << 8;
          else
            {
              clib_memcpy_fast (tmp.as_u8, q + 2, n % sizeof (u64));
@@ -168,7 +170,10 @@ hash_memory64 (void *p, word n_bytes, u64 state)
       if (n % sizeof (u64))
        {
          if (PREDICT_TRUE (page_boundary_crossing == 0))
-           b += zap64 (clib_mem_unaligned (q + 1, u64), n % sizeof (u64));
+           b +=
+             zap64 (CLIB_MEM_OVERFLOW
+                    (clib_mem_unaligned (q + 1, u64), q + 1, sizeof (u64)),
+                    n % sizeof (u64));
          else
            {
              clib_memcpy_fast (tmp.as_u8, q + 1, n % sizeof (u64));
@@ -181,7 +186,10 @@ hash_memory64 (void *p, word n_bytes, u64 state)
       if (n % sizeof (u64))
        {
          if (PREDICT_TRUE (page_boundary_crossing == 0))
-           a += zap64 (clib_mem_unaligned (q + 0, u64), n % sizeof (u64));
+           a +=
+             zap64 (CLIB_MEM_OVERFLOW
+                    (clib_mem_unaligned (q + 0, u64), q + 0, sizeof (u64)),
+                    n % sizeof (u64));
          else
            {
              clib_memcpy_fast (tmp.as_u8, q, n % sizeof (u64));