aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/CodeGen/CodeGenModule.cpp
diff options
context:
space:
mode:
authorThurston Dang <thurston@google.com>2025-03-20 08:02:48 -0700
committerGitHub <noreply@github.com>2025-03-20 08:02:48 -0700
commit3b3f8c50b646600dc1846c7d3d018fdb39fbfe0b (patch)
tree898909f8a864b10a4b0c984d83d88028df94af82 /clang/lib/CodeGen/CodeGenModule.cpp
parentfdeb2ff30407afbfc3596aaf417a2a91cdff20c9 (diff)
downloadllvm-3b3f8c50b646600dc1846c7d3d018fdb39fbfe0b.zip
llvm-3b3f8c50b646600dc1846c7d3d018fdb39fbfe0b.tar.gz
llvm-3b3f8c50b646600dc1846c7d3d018fdb39fbfe0b.tar.bz2
[asan] Re-exec without ASLR if needed on 32-bit Linux (#131975)
High-entropy ASLR allows up to 16-bits of entropy (2**16 4KB pages == 256MB; a bit more in practice because of implementation details), which is a significant chunk of the user address space on 32-bit systems (4GB or less). This, combined with ASan's shadow (512MB) and ASan's fixed shadow offset (512MB), makes it possible for large binaries to fail to map the shadow. This patch changes ASan to do a one-time re-exec without ASLR if it cannot map the shadow, thus reclaiming the ~256MB of address space. Alternatives considered: 1) We don't lower ASan's fixed shadow offset, because that would limit non-PIE binaries. 2) We don't switch to a dynamic shadow offset, because ASan for 32-bit Linux relies on the compile-time constant offset to optimize its instrumentation and compiler-rt. This is loosely inspired by https://github.com/llvm/llvm-project/pull/78351, https://github.com/llvm/llvm-project/pull/85142, and https://github.com/llvm/llvm-project/pull/85674, though those were required because there were no static shadow mappings that could fully shadow the range of user mappings; this is not the case for ASan.
Diffstat (limited to 'clang/lib/CodeGen/CodeGenModule.cpp')
0 files changed, 0 insertions, 0 deletions