Changeset View
Changeset View
Standalone View
Standalone View
head/lib/libc/x86/sys/pkru.c
Show First 20 Lines • Show All 65 Lines • ▼ Show 20 Lines | x86_pkru_get_perm_hw(u_int keyidx, int *access, int *modify) | ||||
} | } | ||||
keyidx *= 2; | keyidx *= 2; | ||||
pkru = rdpkru(); | pkru = rdpkru(); | ||||
*access = (pkru & (1 << keyidx)) == 0; | *access = (pkru & (1 << keyidx)) == 0; | ||||
*modify = (pkru & (2 << keyidx)) == 0; | *modify = (pkru & (2 << keyidx)) == 0; | ||||
return (0); | return (0); | ||||
} | } | ||||
DEFINE_UIFUNC(, int, x86_pkru_get_perm, (u_int, int *, int *), static) | DEFINE_UIFUNC(, int, x86_pkru_get_perm, (u_int, int *, int *)) | ||||
{ | { | ||||
return ((cpu_stdext_feature2 & CPUID_STDEXT2_OSPKE) == 0 ? | return ((cpu_stdext_feature2 & CPUID_STDEXT2_OSPKE) == 0 ? | ||||
x86_pkru_get_perm_unsup : x86_pkru_get_perm_hw); | x86_pkru_get_perm_unsup : x86_pkru_get_perm_hw); | ||||
} | } | ||||
static int | static int | ||||
x86_pkru_set_perm_unsup(u_int keyidx, int access, int modify) | x86_pkru_set_perm_unsup(u_int keyidx, int access, int modify) | ||||
Show All 18 Lines | x86_pkru_set_perm_hw(u_int keyidx, int access, int modify) | ||||
if (!access) | if (!access) | ||||
pkru |= 1 << keyidx; | pkru |= 1 << keyidx; | ||||
if (!modify) | if (!modify) | ||||
pkru |= 2 << keyidx; | pkru |= 2 << keyidx; | ||||
wrpkru(pkru); | wrpkru(pkru); | ||||
return (0); | return (0); | ||||
} | } | ||||
DEFINE_UIFUNC(, int, x86_pkru_set_perm, (u_int, int, int), static) | DEFINE_UIFUNC(, int, x86_pkru_set_perm, (u_int, int, int)) | ||||
{ | { | ||||
return ((cpu_stdext_feature2 & CPUID_STDEXT2_OSPKE) == 0 ? | return ((cpu_stdext_feature2 & CPUID_STDEXT2_OSPKE) == 0 ? | ||||
x86_pkru_set_perm_unsup : x86_pkru_set_perm_hw); | x86_pkru_set_perm_unsup : x86_pkru_set_perm_hw); | ||||
} | } | ||||
int | int | ||||
x86_pkru_protect_range(void *addr, unsigned long len, u_int keyidx, int flags) | x86_pkru_protect_range(void *addr, unsigned long len, u_int keyidx, int flags) | ||||
Show All 21 Lines |