From 1a3e08a7197addb1c07e66c1b1da3286c9bcb140 Mon Sep 17 00:00:00 2001 From: Benoît Ganne Date: Thu, 11 Feb 2021 19:46:43 +0100 Subject: vppinfra: fix memcpy undefined behaviour MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Calling mem{cpy,move} with NULL pointers results in undefined behaviour. This in turns is exploited by GCC. For example, the sequence: memcpy (dst, src, n); if (!src) return; src[0] = 0xcafe; will be optimized as memcpy (dst, src, n); src[0] = 0xcafe; IOW the test for NULL is gone. vec_*() functions sometime call memcpy with NULL pointers and 0 length, triggering this optimization. For example, the sequence: vec_append(v1, v2); len = vec_len(v2); will crash if v2 is NULL, because the test for NULL pointer in vec_len() has been optimized out. This commit fixes occurrences of such undefined behaviour, and also introduces a memcpy wrapper to catch those in debug mode. Type: fix Change-Id: I175e2dd726a883f97cf7de3b15f66d4b237ddefd Signed-off-by: Benoît Ganne --- src/vppinfra/memcpy_avx512.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/vppinfra/memcpy_avx512.h') diff --git a/src/vppinfra/memcpy_avx512.h b/src/vppinfra/memcpy_avx512.h index 1444c271ff1..98dac75beac 100644 --- a/src/vppinfra/memcpy_avx512.h +++ b/src/vppinfra/memcpy_avx512.h @@ -144,7 +144,7 @@ clib_mov512blocks (u8 * dst, const u8 * src, size_t n) } static inline void * -clib_memcpy_fast (void *dst, const void *src, size_t n) +clib_memcpy_fast_avx512 (void *dst, const void *src, size_t n) { uword dstu = (uword) dst; uword srcu = (uword) src; -- cgit 1.2.3-korg