[all-commits] [llvm/llvm-project] 3b3f8c: [asan] Re-exec without ASLR if needed on 32-bit Li...

Thurston Dang via All-commits all-commits at lists.llvm.org
Thu Mar 20 08:03:10 PDT 2025


  Branch: refs/heads/main
  Home:   https://github.com/llvm/llvm-project
  Commit: 3b3f8c50b646600dc1846c7d3d018fdb39fbfe0b
      https://github.com/llvm/llvm-project/commit/3b3f8c50b646600dc1846c7d3d018fdb39fbfe0b
  Author: Thurston Dang <thurston at google.com>
  Date:   2025-03-20 (Thu, 20 Mar 2025)

  Changed paths:
    M compiler-rt/lib/asan/asan_internal.h
    M compiler-rt/lib/asan/asan_linux.cpp
    M compiler-rt/lib/asan/asan_mac.cpp
    M compiler-rt/lib/asan/asan_shadow_setup.cpp
    M compiler-rt/lib/asan/asan_win.cpp

  Log Message:
  -----------
  [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.



To unsubscribe from these emails, change your notification settings at https://github.com/llvm/llvm-project/settings/notifications


More information about the All-commits mailing list