• Daniel Lehmann's avatar
    [wasm] Align different write protection scopes · d0cfa6aa
    Daniel Lehmann authored
    Currently, we have two different classes for switching the WebAssembly
    generated code space to writable (e.g., before patching jump tables, or
    when adding or removing code): `CodeSpaceWriteScope` (with the macro
    `CODE_SPACE_WRITE_SCOPE`) and `NativeModuleModificationScope`.
    The former was introduced for Apple Silicon ARM64 hardware ("Apple M1"),
    which uses `MAP_JIT` + `pthread_jit_write_protect_np()` to change memory
    permissions. The latter uses either Intel PKU (aka. memory protection
    keys) to switch permissions (fast and thread-local, like on M1), and
    alternatively `mprotect()`, on systems that do not have PKU support.
    
    Since both classes serve the same purpose just with different
    implementations on different platforms, we want to merge them in
    follow-up CLs. As a first step, here we align all uses of
    `CODE_SPACE_WRITE_SCOPE` with existing `NativeModuleModificationScope`s.
    The two had diverged due to optimization work, where we moved
    `NativeModuleModificationScope`s around (pulling them out of loops and
    across function boundaries) to lower the amount of mprotect switches.
    
    This should have none, or at best a very small positive performance
    impact on Apple M1, since we now also switch less often (even though
    switching should be very cheap). In terms of security, this in theory
    makes the code space writable for longer time spans, but this is
    probably not a large effect because
    (1) we often moved the scope outside of loops, where it was open for
    every iteration anyway, or
    (2) in some cases a CODE_SPACE_WRITE_SCOPE was open somewhere on the
    call stack already.
    
    R=jkummerow@chromium.org
    CC=clemensb@chromium.org
    
    Bug: v8:11714
    Change-Id: Id8744429e1183e118ab5e078750d294a99c9dce0
    Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2968946Reviewed-by: 's avatarJakob Kummerow <jkummerow@chromium.org>
    Commit-Queue: Daniel Lehmann <dlehmann@google.com>
    Cr-Commit-Position: refs/heads/master@{#75230}
    d0cfa6aa
Name
Last commit
Last update
..
api Loading commit data...
asmjs Loading commit data...
ast Loading commit data...
base Loading commit data...
baseline Loading commit data...
bigint Loading commit data...
builtins Loading commit data...
codegen Loading commit data...
common Loading commit data...
compiler Loading commit data...
compiler-dispatcher Loading commit data...
d8 Loading commit data...
date Loading commit data...
debug Loading commit data...
deoptimizer Loading commit data...
diagnostics Loading commit data...
execution Loading commit data...
extensions Loading commit data...
flags Loading commit data...
handles Loading commit data...
heap Loading commit data...
ic Loading commit data...
init Loading commit data...
inspector Loading commit data...
interpreter Loading commit data...
json Loading commit data...
libplatform Loading commit data...
libsampler Loading commit data...
logging Loading commit data...
numbers Loading commit data...
objects Loading commit data...
parsing Loading commit data...
profiler Loading commit data...
protobuf Loading commit data...
regexp Loading commit data...
roots Loading commit data...
runtime Loading commit data...
sanitizer Loading commit data...
snapshot Loading commit data...
strings Loading commit data...
tasks Loading commit data...
third_party Loading commit data...
torque Loading commit data...
tracing Loading commit data...
trap-handler Loading commit data...
utils Loading commit data...
wasm Loading commit data...
web-snapshot Loading commit data...
zone Loading commit data...
DEPS Loading commit data...
DIR_METADATA Loading commit data...
OWNERS Loading commit data...