• 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
.github Loading commit data...
build_overrides Loading commit data...
custom_deps Loading commit data...
docs Loading commit data...
gni Loading commit data...
include Loading commit data...
infra Loading commit data...
samples Loading commit data...
src Loading commit data...
test Loading commit data...
testing Loading commit data...
third_party Loading commit data...
tools Loading commit data...
.clang-format Loading commit data...
.clang-tidy Loading commit data...
.editorconfig Loading commit data...
.flake8 Loading commit data...
.git-blame-ignore-revs Loading commit data...
.gitattributes Loading commit data...
.gitignore Loading commit data...
.gn Loading commit data...
.vpython Loading commit data...
.ycm_extra_conf.py Loading commit data...
AUTHORS Loading commit data...
BUILD.gn Loading commit data...
CODE_OF_CONDUCT.md Loading commit data...
COMMON_OWNERS Loading commit data...
DEPS Loading commit data...
DIR_METADATA Loading commit data...
ENG_REVIEW_OWNERS Loading commit data...
INFRA_OWNERS Loading commit data...
INTL_OWNERS Loading commit data...
LICENSE Loading commit data...
LICENSE.fdlibm Loading commit data...
LICENSE.strongtalk Loading commit data...
LICENSE.v8 Loading commit data...
MIPS_OWNERS Loading commit data...
OWNERS Loading commit data...
PPC_OWNERS Loading commit data...
PRESUBMIT.py Loading commit data...
README.md Loading commit data...
RISCV_OWNERS Loading commit data...
S390_OWNERS Loading commit data...
WATCHLISTS Loading commit data...
codereview.settings Loading commit data...