• Daniel Lehmann's avatar
    [wasm] Add missing scopes for code modification · eb57c722
    Daniel Lehmann authored
    This is the second CL in a line of two (see crrev.com/c/2835237) to
    bring write-protection to the WebAssembly code space. The previous CL
    changed the page permissions from W^X (only either writable or
    executable can be active, but never both) to write-protection (due to
    concurrent execution in the main thread). However, write-protection
    still did not work, because in several places the code space is
    modified without properly switching it to writable beforehand.
    
    This CL fixes --wasm-write-protect-code-memory such that it can now be
    enabled again (with potentially high overhead due to frequent page
    protection switches). For that, it adds the missing switching to
    writable by adding {NativeModuleModificationScope} objects (similar to
    the already existing {CodeSpaceWriteScope} objects for Apple M1
    hardware).
    
    This CL also fixes a race condition between checking for the current
    writable permission and actually setting the permission, by protecting
    the counter of currently active writers with the same lock as the
    {WasmCodeAllocator} itself. (Before multi-threaded compilation, this
    was not necessary.)
    
    Finally, this CL also changes the {Mutex} protecting the
    {WasmCodeAllocator} to a {RecursiveMutex} because it can be requested
    multiple times in the call hierarchy of the same thread, which would
    cause a deadlock otherwise. Since {TryLock()} of a {RecursiveMutex}
    never fails, this also removes the (now failing) DCHECKs.
    
    R=clemensb@chromium.org
    CC=​​jkummerow@chromium.org
    
    Bug: v8:11663
    Change-Id: I4db27ad0a9348021b0b663dbe88b3432a4d8d6b5
    Cq-Include-Trybots: luci.v8.try:v8_linux64_tsan_rel_ng
    Cq-Include-Trybots: luci.v8.try:v8_linux64_tsan_isolates_rel_ng
    Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2835238
    Commit-Queue: Daniel Lehmann <dlehmann@google.com>
    Reviewed-by: 's avatarClemens Backes <clemensb@chromium.org>
    Cr-Commit-Position: refs/heads/master@{#74163}
    eb57c722
Name
Last commit
Last update
..
debug Loading commit data...
platform Loading commit data...
utils Loading commit data...
DEPS Loading commit data...
DIR_METADATA Loading commit data...
OWNERS Loading commit data...
address-region.h Loading commit data...
atomic-utils.h Loading commit data...
atomicops.h Loading commit data...
atomicops_internals_atomicword_compat.h Loading commit data...
base-export.h Loading commit data...
bit-field.h Loading commit data...
bits-iterator.h Loading commit data...
bits.cc Loading commit data...
bits.h Loading commit data...
bounded-page-allocator.cc Loading commit data...
bounded-page-allocator.h Loading commit data...
bounds.h Loading commit data...
build_config.h Loading commit data...
compiler-specific.h Loading commit data...
cpu.cc Loading commit data...
cpu.h Loading commit data...
division-by-constant.cc Loading commit data...
division-by-constant.h Loading commit data...
enum-set.h Loading commit data...
export-template.h Loading commit data...
file-utils.cc Loading commit data...
file-utils.h Loading commit data...
flags.h Loading commit data...
free_deleter.h Loading commit data...
functional.cc Loading commit data...
functional.h Loading commit data...
hashmap-entry.h Loading commit data...
hashmap.h Loading commit data...
ieee754.cc Loading commit data...
ieee754.h Loading commit data...
immediate-crash.h Loading commit data...
iterator.h Loading commit data...
lazy-instance.h Loading commit data...
logging.cc Loading commit data...
logging.h Loading commit data...
lsan.h Loading commit data...
macros.h Loading commit data...
memory.h Loading commit data...
once.cc Loading commit data...
once.h Loading commit data...
optional.h Loading commit data...
overflowing-math.h Loading commit data...
page-allocator.cc Loading commit data...
page-allocator.h Loading commit data...
qnx-math.h Loading commit data...
region-allocator.cc Loading commit data...
region-allocator.h Loading commit data...
ring-buffer.h Loading commit data...
safe_conversions.h Loading commit data...
safe_conversions_arm_impl.h Loading commit data...
safe_conversions_impl.h Loading commit data...
small-vector.h Loading commit data...
sys-info.cc Loading commit data...
sys-info.h Loading commit data...
template-utils.h Loading commit data...
threaded-list.h Loading commit data...
timezone-cache.h Loading commit data...
type-traits.h Loading commit data...
ubsan.cc Loading commit data...
v8-fallthrough.h Loading commit data...
vlq-base64.cc Loading commit data...
vlq-base64.h Loading commit data...
vlq.h Loading commit data...
win32-headers.h Loading commit data...