diff options
author | Thomas Gleixner <tglx@linutronix.de> | 2021-06-23 15:02:07 +0300 |
---|---|---|
committer | Borislav Petkov <bp@suse.de> | 2021-06-23 19:59:44 +0300 |
commit | 8a1dc55a3f3ef0a723c3c117a567e7b5dd2c1793 (patch) | |
tree | 81c47aabaa457f59348e7d168325ecf9d803340c /arch/x86/include/asm/pkru.h | |
parent | b2681e791dbcee6acb1dca7a5076a0285109ac4c (diff) | |
download | linux-8a1dc55a3f3ef0a723c3c117a567e7b5dd2c1793.tar.xz |
x86/cpu: Sanitize X86_FEATURE_OSPKE
X86_FEATURE_OSPKE is enabled first on the boot CPU and the feature flag is
set. Secondary CPUs have to enable CR4.PKE as well and set their per CPU
feature flag. That's ineffective because all call sites have checks for
boot_cpu_data.
Make it smarter and force the feature flag when PKU is enabled on the boot
cpu which allows then to use cpu_feature_enabled(X86_FEATURE_OSPKE) all
over the place. That either compiles the code out when PKEY support is
disabled in Kconfig or uses a static_cpu_has() for the feature check which
makes a significant difference in hotpaths, e.g. context switch.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Borislav Petkov <bp@suse.de>
Reviewed-by: Borislav Petkov <bp@suse.de>
Link: https://lkml.kernel.org/r/20210623121455.305113644@linutronix.de
Diffstat (limited to 'arch/x86/include/asm/pkru.h')
-rw-r--r-- | arch/x86/include/asm/pkru.h | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/arch/x86/include/asm/pkru.h b/arch/x86/include/asm/pkru.h index 35ffcfd6e403..ec8dd2878dc9 100644 --- a/arch/x86/include/asm/pkru.h +++ b/arch/x86/include/asm/pkru.h @@ -32,7 +32,7 @@ static inline bool __pkru_allows_write(u32 pkru, u16 pkey) static inline u32 read_pkru(void) { - if (boot_cpu_has(X86_FEATURE_OSPKE)) + if (cpu_feature_enabled(X86_FEATURE_OSPKE)) return rdpkru(); return 0; } @@ -41,7 +41,7 @@ static inline void write_pkru(u32 pkru) { struct pkru_state *pk; - if (!boot_cpu_has(X86_FEATURE_OSPKE)) + if (!cpu_feature_enabled(X86_FEATURE_OSPKE)) return; pk = get_xsave_addr(¤t->thread.fpu.state.xsave, XFEATURE_PKRU); |