From 1ef38743fd1499d41cb5e5a6a8e8529fe10393d1 Mon Sep 17 00:00:00 2001 From: Tianyu Li Date: Thu, 17 Jun 2021 07:08:32 +0000 Subject: svm: fix asan check failed @svm_map_region on arm ==283032==AddressSanitizer CHECK failed: compiler-rt/lib/asan/asan_mapping.h:366 "((AddrIsInMem(p))) != (0)" (0x0, 0x0) #0 0x49c128 in __asan::AsanCheckFailed #1 0x4ae8dc in __sanitizer::CheckFailed #2 0x495dec in __asan::ShadowSegmentEndpoint::ShadowSegmentEndpoint #3 0x495e48 in __asan_unpoison_memory_region #4 0xfffff4e851f8 in svm_map_region /home/vpp/src/svm/svm.c:611:7 #5 0xfffff4e86d9c in svm_region_init_internal /home/vpp/src/svm/svm.c:797:8 #6 0xfffff4e87ce4 in svm_region_init_args /home/vpp/src/svm/svm.c:880:3 #7 0xfffff7f30d30 in vlibmemory_init /home/vpp/src/vlibmemory/memory_api.c:974:3 #8 0xfffff4fd5368 in vlib_main /home/vpp/src/vlib/main.c:1986:16 svm_global_region_base_va 0x200000000000 is not in the aarch64 mapping range, leading check failure and vpp cannot start. aarch64 asan mapping || `[0x201000000000, 0xffffffffffff]` || HighMem || || `[0x041200000000, 0x200fffffffff]` || HighShadow || || `[0x001200000000, 0x0411ffffffff]` || ShadowGap || || `[0x001000000000, 0x0011ffffffff]` || LowShadow || || `[0x000000000000, 0x000fffffffff]` || LowMem || x86 asan mapping || `[0x10007fff8000, 0x7fffffffffff]` || HighMem || || `[0x02008fff7000, 0x10007fff7fff]` || HighShadow || || `[0x00008fff7000, 0x02008fff6fff]` || ShadowGap || || `[0x00007fff8000, 0x00008fff6fff]` || LowShadow || || `[0x000000000000, 0x00007fff7fff]` || LowMem || Type: fix Signed-off-by: Tianyu Li Change-Id: I55ddbdcd361d66d4cfaf6459b2fa20fd8b64af37 --- src/svm/svm.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) (limited to 'src/svm') diff --git a/src/svm/svm.c b/src/svm/svm.c index 313fe4a8787..b844e20b4cc 100644 --- a/src/svm/svm.c +++ b/src/svm/svm.c @@ -60,10 +60,6 @@ svm_get_root_rp (void) u64 svm_get_global_region_base_va () { -#ifdef CLIB_SANITIZE_ADDR - return 0x200000000000; -#endif - #if __aarch64__ /* On AArch64 VA space can have different size, from 36 to 48 bits. Here we are trying to detect VA bits by parsing /proc/self/maps @@ -94,6 +90,9 @@ svm_get_global_region_base_va () clib_unix_error ("unexpected va bits '%u'", bits); #endif +#ifdef CLIB_SANITIZE_ADDR + return 0x200000000000; +#endif /* default value */ return 0x130000000ULL; } -- cgit 1.2.3-korg