• Daniel Lehmann's avatar
    [wasm] Add PKU flag and alloc/free functions · a0a5aeec
    Daniel Lehmann authored
    To enforce W^X for the WebAssembly code space, we want to explore using
    Intel memory protection keys for userspace, also known as MPK, PKEYs, or
    PKU. Instead of flipping page protection flags with mprotect (which
    incurs a high syscall overhead; and which switches flags for the whole
    process), with PKU we associate a key with each page once and then
    change the permissions of that key with a fast thread-local register
    write. That is, this gives both finger-grained permissions (per-thread)
    and more performance.
    
    This CL is starts experimenting with PKUs by
    (1) adding a flag to turn on prototype PKU support; and if set to true
    (2) allocates a protection key once per {WasmCodeManager} in x64 Linux
    systems.
    
    This is a partial reland of https://crrev.com/c/2850932, which was
    reverted due to an added histogram failing Chromium integration.
    Since the histogram (to record PKU support) is independent of the
    functionality in this CL, we split it out into its own CL (to come).
    
    R=clemensb@chromium.org
    CC=​jkummerow@chromium.org
    
    Bug: v8:11714
    Change-Id: I67c8679495c55fa51da8243582963649abde660b
    Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2878738
    Commit-Queue: Daniel Lehmann <dlehmann@google.com>
    Reviewed-by: 's avatarClemens Backes <clemensb@chromium.org>
    Cr-Commit-Position: refs/heads/master@{#74435}
    a0a5aeec
memory-protection-key.cc 3.39 KB