Skip to content

Commit 1ef3874

Browse files
TianyuLi0florincoras
authored andcommitted
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 <[email protected]> Change-Id: I55ddbdcd361d66d4cfaf6459b2fa20fd8b64af37
1 parent cde1769 commit 1ef3874

File tree

1 file changed

+3
-4
lines changed

1 file changed

+3
-4
lines changed

src/svm/svm.c

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -60,10 +60,6 @@ svm_get_root_rp (void)
6060
u64
6161
svm_get_global_region_base_va ()
6262
{
63-
#ifdef CLIB_SANITIZE_ADDR
64-
return 0x200000000000;
65-
#endif
66-
6763
#if __aarch64__
6864
/* On AArch64 VA space can have different size, from 36 to 48 bits.
6965
Here we are trying to detect VA bits by parsing /proc/self/maps
@@ -94,6 +90,9 @@ svm_get_global_region_base_va ()
9490
clib_unix_error ("unexpected va bits '%u'", bits);
9591
#endif
9692

93+
#ifdef CLIB_SANITIZE_ADDR
94+
return 0x200000000000;
95+
#endif
9796
/* default value */
9897
return 0x130000000ULL;
9998
}

0 commit comments

Comments
 (0)