[compiler-rt] 6f42b97 - ASan: move allocator base to avoid conflict with high-entropy ASLR for x86-64 Linux

Thurston Dang via llvm-commits llvm-commits at lists.llvm.org
Wed Apr 12 09:32:15 PDT 2023


Author: Thurston Dang
Date: 2023-04-12T16:12:11Z
New Revision: 6f42b97a29a5872c115029c615f55f33419a4c1f

URL: https://github.com/llvm/llvm-project/commit/6f42b97a29a5872c115029c615f55f33419a4c1f
DIFF: https://github.com/llvm/llvm-project/commit/6f42b97a29a5872c115029c615f55f33419a4c1f.diff

LOG: ASan: move allocator base to avoid conflict with high-entropy ASLR for x86-64 Linux

Users have discovered [*] that when CONFIG_ARCH_MMAP_RND_BITS == 32,
it will frequently conflict with ASan's allocator on x86-64 Linux, because the
PIE program segment base address of 0x555555555554 plus an ASLR shift of up to
((2**32) * 4K == 0x100000000000) will sometimes exceed ASan's hardcoded
base address of 0x600000000000. We fix this by simply moving the allocator base
to 0x500000000000, which is below the PIE program segment base address. This is
cleaner than trying to move it to another location that is sandwiched between
the PIE program and library segments, because if either of those grow too large,
it will collide with the allocator region.

Note that we will never need to change this base address again (unless we want to increase
the size of the allocator), because ASLR cannot be set above 32-bits for x86-64 Linux (the
PIE program segment and library segments would collide with each other; see also
ARCH_MMAP_RND_BITS_MAX in https://github.com/torvalds/linux/blob/master/arch/x86/Kconfig).

[*] see https://b.corp.google.com/issues/276925478
and https://groups.google.com/a/google.com/g/chrome-os-gardeners/c/BbfzCP3dEeo/m/h3C_vVUxCQAJ

Differential Revision: https://reviews.llvm.org/D147984

Added: 
    

Modified: 
    compiler-rt/lib/asan/asan_allocator.h

Removed: 
    


################################################################################
diff  --git a/compiler-rt/lib/asan/asan_allocator.h b/compiler-rt/lib/asan/asan_allocator.h
index 0b4dbf03bb9d..05dcd2d6f541 100644
--- a/compiler-rt/lib/asan/asan_allocator.h
+++ b/compiler-rt/lib/asan/asan_allocator.h
@@ -144,7 +144,7 @@ const uptr kAllocatorSpace = ~(uptr)0;
 const uptr kAllocatorSize  =  0x8000000000ULL;  // 500G
 typedef DefaultSizeClassMap SizeClassMap;
 # else
-const uptr kAllocatorSpace = 0x600000000000ULL;
+const uptr kAllocatorSpace = 0x500000000000ULL;
 const uptr kAllocatorSize  =  0x40000000000ULL;  // 4T.
 typedef DefaultSizeClassMap SizeClassMap;
 # endif


        


More information about the llvm-commits mailing list