[wasm][asan][windows] Reset thread-in-wasm flag in memory_fill_wrapper
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: Ben Smith <binji@chromium.org> Cr-Commit-Position: refs/heads/master@{#61658}
Showing
Please
register
or
sign in
to comment