-
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: Jakob Kummerow <jkummerow@chromium.org> Commit-Queue: Daniel Lehmann <dlehmann@google.com> Cr-Commit-Position: refs/heads/master@{#75230}
d0cfa6aa