• Andreas Haas's avatar
    [wasm][asan][windows] Reset thread-in-wasm flag in memory_fill_wrapper · 2ca2f370
    Andreas Haas authored
    ASAN on Windows uses exceptions to manage its shadow memory. However,
    this behavior can conflict with WebAssembly trap handler, because
    WebAssembly trap handler are executed before the ASAN exception handler.
    
    For some WebAssembly instructions we do not generate assembly code but
    call to C functions instead. Since these functions are very simple, we
    do not want to reset the thread-in-wasm flag before calling them.
    However, when these functions trigger the ASAN exceptions, the
    thread-in-wasm flag gets out-of-sync. This happened for the
    memory_fill_wrapper function. Originally we thought that it's sufficient
    to just mark the function with DISABLE_ASAN. However, this is not enough
    because clang compiles the function to use memset, and memset gets
    replaced by ASAN with asan_memset.
    
    Therefore I decided now that just for sanitizer builds on Windows, we
    reset the thread-in-wasm flag in memory_fill_wrapper. This is not ideal
    because it's test-specific code within production code. However, the
    alternatives also don't sound convincing.
    
    Alternatives would be:
    * Resetting the thread-in-wasm flag whenever we call a c-function
      - This would be unnecessary performance overhead for production code
        just to make a test work.
    * Configure ASAN to not change memset.
      - This would weaken ASAN also for other cases.
    * Disable ASAN for trap handlers, or trap handlers in ASAN builds.
      - This would reduce test coverage.
    
    R=binji@chromium.org
    
    Bug: chromium:957405
    Change-Id: Ibd13c6fe7b898238f636db576552e3e4b278c04a
    Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1617671
    Commit-Queue: Andreas Haas <ahaas@chromium.org>
    Reviewed-by: 's avatarBen Smith <binji@chromium.org>
    Cr-Commit-Position: refs/heads/master@{#61658}
    2ca2f370
wasm-external-refs.cc 11.5 KB