7#if V8_HAS_PKU_JIT_WRITE_PROTECT
10#error pkey support in this file is only implemented on Linux
14#include <sys/syscall.h>
15#include <sys/utsname.h>
19#if V8_HAS_PKU_JIT_WRITE_PROTECT
21extern int pkey_alloc(
unsigned int flags,
unsigned int access_rights)
V8_WEAK;
22extern int pkey_free(
int pkey)
V8_WEAK;
26bool KernelHasPkruFix() {
33 struct utsname uname_buffer;
35 int kernel, major, minor;
37 if (sscanf(uname_buffer.release,
"%d.%d.%d", &kernel, &major, &minor) != 3) {
41 return kernel > 5 || (kernel == 5 && major >= 13) ||
42 (kernel == 5 && major == 4 && minor >= 182) ||
43 (kernel == 5 && major == 10 && minor >= 103);
47#ifdef PKEY_DISABLE_WRITE
48 if (!pkey_alloc)
return -1;
50 static bool kernel_has_pkru_fix = KernelHasPkruFix();
51 if (!kernel_has_pkru_fix)
return -1;
53 return pkey_alloc(0, PKEY_DISABLE_WRITE);
59int PkeyFree(
int pkey) {
61 return pkey_free(pkey);
71#if V8_HAS_PKU_JIT_WRITE_PROTECT
78#if V8_HAS_PKU_JIT_WRITE_PROTECT
95#if V8_HAS_PKU_JIT_WRITE_PROTECT
103#if V8_HAS_PKU_JIT_WRITE_PROTECT
111#if V8_HAS_PKU_JIT_WRITE_PROTECT
#define CHECK_EQ(lhs, rhs)
#define DCHECK(condition)