Skip to content

ASAN (AddressSanitizer) binaries crash with SIGSEGV intermittently during initialization on WSL2 #40168

@ttuurrnn

Description

@ttuurrnn

Windows Version

Microsoft Windows [Version 10.0.22631.4169]

WSL Version

2.6.3.0

Are you using WSL 1 or WSL 2?

  • WSL 2
  • WSL 1

Kernel Version

Linux version 6.6.87.2-microsoft-standard-WSL2

Distro Version

Ubuntu 22.04.5 LTS

Other Software

Clang/LLVM 14.0.0 (Ubuntu clang version 14.0.0-1ubuntu1.1)
AFL++ 4.33c

Repro Steps

  1. Create a minimal C file:

    cat > test_asan.c << 'EOF'
    int main() { return 0; }
    EOF

  2. Compile with ASAN:

    clang -fsanitize=address -g test_asan.c -o test_asan

  3. Run 20 times in a loop:

    for i in $(seq 1 20); do
    ./test_asan 2>/dev/null || echo "CRASH run $i (exit $?)"
    done

Expected Behavior

All 20 runs should exit with code 0.
A program that does nothing (main returns 0) should never crash.

Actual Behavior

~30% of runs exit with SIGSEGV (exit 139), with no ASAN output.

Root cause (identified via strace): ASAN shadow memory initialization
uses mmap(MAP_FIXED) to reserve specific virtual address ranges:

mmap(0x603000000000, ..., MAP_FIXED, ...)
mmap(0x603e00000000, ..., MAP_FIXED, ...)
mmap(0x60b000000000, ..., MAP_FIXED, ...)
... (several more fixed-address mappings)

On successful runs, all mappings succeed. On failing runs,
WSL2's ASLR has already placed other mappings at these addresses,
causing MAP_FIXED to fail → SIGSEGV during ASAN initialization,
before any user code executes.

Note: The bug does not reproduce under strace (strace changes the
memory layout, avoiding the conflict).

Setting ASAN_OPTIONS=detect_leaks=0 does NOT fix the issue.

Diagnostic Logs

Image Image Image

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions