[compiler-rt] [asan] Switch allocator to dynamic base address (PR #98511)

Thurston Dang via llvm-commits llvm-commits at lists.llvm.org
Thu Jul 11 10:59:27 PDT 2024


https://github.com/thurstond created https://github.com/llvm/llvm-project/pull/98511

This ports a proposed memprof fix (https://github.com/llvm/llvm-project/pull/98510), which has a shadow memory and allocator layout that is similar to ASan. Although we have only observed the failure for memprof on a buildbot [*], it could theoretically happen for ASan.

asan_rtl.cpp calls InitializeShadowMemory() - which dynamically/"randomly" chooses a base address for the shadow mapping - prior to InitializeAllocator(). If we are unlucky, the shadow memory may be mapped in the same region where the allocator wants to be.

This patch fixes the issue by changing the allocator to dynamically choosing a base address, as suggested by Vitaly. For comparison, HWASan already dynamically chooses the base addresses for the shadow mapping and allocator.

[*] https://lab.llvm.org/buildbot/#/builders/66/builds/1361/steps/17/logs/stdio

>From 52467acf6f723b1b1583e47b056cbb23fd7dfa1d Mon Sep 17 00:00:00 2001
From: Thurston Dang <thurston at google.com>
Date: Thu, 11 Jul 2024 17:57:22 +0000
Subject: [PATCH] [asan] Switch allocator to dynamic base address

This ports a proposed memprof fix (https://github.com/llvm/llvm-project/pull/98510), which has a shadow memory and allocator layout that is similar to ASan. Although we have only observed the failure for memprof on a buildbot [*], it could theoretically happen for ASan.

asan_rtl.cpp calls InitializeShadowMemory() - which dynamically/"randomly" chooses a base address for the shadow mapping - prior to InitializeAllocator(). If we are unlucky, the shadow memory may be mapped in the same region where the allocator wants to be.

This patch fixes the issue by changing the allocator to dynamically choosing a base address, as suggested by Vitaly. For comparison, HWASan already dynamically chooses the base addresses for the shadow mapping and allocator.

[*] https://lab.llvm.org/buildbot/#/builders/66/builds/1361/steps/17/logs/stdio
---
 compiler-rt/lib/asan/asan_allocator.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/compiler-rt/lib/asan/asan_allocator.h b/compiler-rt/lib/asan/asan_allocator.h
index c3c4fae85b129..8fb113dd62f98 100644
--- a/compiler-rt/lib/asan/asan_allocator.h
+++ b/compiler-rt/lib/asan/asan_allocator.h
@@ -214,7 +214,7 @@ const uptr kAllocatorSpace = 0x600000000000ULL;
 const uptr kAllocatorSize  =  0x40000000000ULL;  // 4T.
 typedef DefaultSizeClassMap SizeClassMap;
 #  else
-const uptr kAllocatorSpace = 0x500000000000ULL;
+const uptr kAllocatorSpace = ~(uptr)0;
 const uptr kAllocatorSize = 0x40000000000ULL;  // 4T.
 typedef DefaultSizeClassMap SizeClassMap;
 #  endif



More information about the llvm-commits mailing list