summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTianyu Li <tianyu.li@arm.com>2021-06-17 07:08:32 +0000
committerFlorin Coras <florin.coras@gmail.com>2021-06-24 14:40:58 +0000
commit1ef38743fd1499d41cb5e5a6a8e8529fe10393d1 (patch)
tree51bdf759455888c807ac00de0c6e7240d2266aeb
parentcde1769a839db5a732e000fb60822362b6c39e86 (diff)
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 <tianyu.li@arm.com> Change-Id: I55ddbdcd361d66d4cfaf6459b2fa20fd8b64af37
-rw-r--r--src/svm/svm.c7
1 files changed, 3 insertions, 4 deletions
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;
}