diff options
Diffstat (limited to 'src/vppinfra/hash.h')
-rw-r--r-- | src/vppinfra/hash.h | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/src/vppinfra/hash.h b/src/vppinfra/hash.h index e4a65d21e65..7d4ed04dc4d 100644 --- a/src/vppinfra/hash.h +++ b/src/vppinfra/hash.h @@ -278,9 +278,20 @@ uword hash_bytes (void *v); always_inline void hash_set_mem_alloc (uword ** h, const void *key, uword v) { + int objsize = __builtin_object_size (key, 0); size_t ksz = hash_header (*h)->user; - void *copy = clib_mem_alloc (ksz); - clib_memcpy_fast (copy, key, ksz); + void *copy; + if (objsize > 0) + { + ASSERT (objsize == ksz); + copy = clib_mem_alloc (objsize); + clib_memcpy_fast (copy, key, objsize); + } + else + { + copy = clib_mem_alloc (ksz); + clib_memcpy_fast (copy, key, ksz); + } hash_set_mem (*h, copy, v); } |