diff options
author | Tianyu Li <tianyu.li@arm.com> | 2021-06-17 07:08:32 +0000 |
---|---|---|
committer | Florin Coras <florin.coras@gmail.com> | 2021-06-24 14:40:58 +0000 |
commit | 1ef38743fd1499d41cb5e5a6a8e8529fe10393d1 (patch) | |
tree | 51bdf759455888c807ac00de0c6e7240d2266aeb | |
parent | cde1769a839db5a732e000fb60822362b6c39e86 (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.c | 7 |
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; } |