From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
To: linux-kernel@vger.kernel.org
Cc: x86@kernel.org, "Andy Lutomirski" <luto@kernel.org>,
"Paolo Bonzini" <pbonzini@redhat.com>,
"Radim Krčmář" <rkrcmar@redhat.com>,
kvm@vger.kernel.org, "Jason A. Donenfeld" <Jason@zx2c4.com>,
"Rik van Riel" <riel@surriel.com>,
"Dave Hansen" <dave.hansen@linux.intel.com>,
"Sebastian Andrzej Siewior" <bigeasy@linutronix.de>
Subject: [PATCH 21/23] x86/fpu: Update xstate's PKRU value on write_pkru()
Date: Wed, 7 Nov 2018 20:48:56 +0100 [thread overview]
Message-ID: <20181107194858.9380-22-bigeasy@linutronix.de> (raw)
In-Reply-To: <20181107194858.9380-1-bigeasy@linutronix.de>
During the context switch the xstate is loaded which also includes the
PKRU value.
If xstate is restored on return to userland it is required that the
PKRU value in xstate is the same as the one in the CPU.
Save the PKRU in xstate during modification.
Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
---
arch/x86/include/asm/pgtable.h | 19 +++++++++++++++++--
1 file changed, 17 insertions(+), 2 deletions(-)
diff --git a/arch/x86/include/asm/pgtable.h b/arch/x86/include/asm/pgtable.h
index 40616e8052924..45ca1c7802812 100644
--- a/arch/x86/include/asm/pgtable.h
+++ b/arch/x86/include/asm/pgtable.h
@@ -23,6 +23,8 @@
#ifndef __ASSEMBLY__
#include <asm/x86_init.h>
+#include <asm/fpu/xstate.h>
+#include <asm/fpu/api.h>
extern pgd_t early_top_pgt[PTRS_PER_PGD];
int __init __early_make_pgtable(unsigned long address, pmdval_t pmd);
@@ -133,8 +135,21 @@ static inline u32 read_pkru(void)
static inline void write_pkru(u32 pkru)
{
- if (boot_cpu_has(X86_FEATURE_OSPKE))
- __write_pkru(pkru);
+ struct pkru_state *pk;
+
+ if (!boot_cpu_has(X86_FEATURE_OSPKE))
+ return;
+
+ pk = __raw_xsave_addr(¤t->thread.fpu.state.xsave, XFEATURE_PKRU);
+ /*
+ * The PKRU value in xstate needs to be in sync with the value that is
+ * written to the CPU. The FPU restore on return to userland would
+ * otherwise load the previous value again.
+ */
+ __fpregs_changes_begin();
+ pk->pkru = pkru;
+ __write_pkru(pkru);
+ __fpregs_changes_end();
}
static inline int pte_young(pte_t pte)
--
2.19.1
next prev parent reply other threads:[~2018-11-07 19:49 UTC|newest]
Thread overview: 45+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-11-07 19:48 [PATCH v4] x86: load FPU registers on return to userland Sebastian Andrzej Siewior
2018-11-07 19:48 ` [PATCH 01/23] x86/fpu: Use ULL for shift in xfeature_uncompacted_offset() Sebastian Andrzej Siewior
2018-11-08 11:38 ` Borislav Petkov
2018-11-09 16:56 ` Sebastian Andrzej Siewior
2018-11-07 19:48 ` [PATCH 02/23] x86/fpu: Remove fpu->initialized usage in __fpu__restore_sig() Sebastian Andrzej Siewior
2018-11-08 14:57 ` Borislav Petkov
2018-11-09 17:35 ` Sebastian Andrzej Siewior
2018-11-09 18:52 ` Borislav Petkov
2018-11-09 23:25 ` Sebastian Andrzej Siewior
2018-11-12 15:56 ` [PATCH] x86/fpu: Disable BH while while loading FPU registers " Sebastian Andrzej Siewior
2018-11-12 17:48 ` Dave Hansen
2018-11-19 11:41 ` Sebastian Andrzej Siewior
2018-11-19 15:04 ` Dave Hansen
2018-11-19 15:06 ` Sebastian Andrzej Siewior
2018-11-19 15:08 ` Dave Hansen
2018-11-19 15:19 ` Sebastian Andrzej Siewior
2018-11-07 19:48 ` [PATCH 03/23] x86/fpu: Remove fpu__restore() Sebastian Andrzej Siewior
2018-11-07 19:48 ` [PATCH 04/23] x86/entry/32: Remove asm/math_emu.h include Sebastian Andrzej Siewior
2018-11-08 18:45 ` Andy Lutomirski
2018-11-07 19:48 ` [PATCH 05/23] x86/fpu: Remove preempt_disable() in fpu__clear() Sebastian Andrzej Siewior
2018-11-07 19:48 ` [PATCH 06/23] x86/fpu: Always init the `state' " Sebastian Andrzej Siewior
2018-11-07 19:48 ` [PATCH 07/23] x86/fpu: Remove fpu->initialized usage in copy_fpstate_to_sigframe() Sebastian Andrzej Siewior
2018-11-07 19:48 ` [PATCH 08/23] x86/fpu: Remove fpu->initialized Sebastian Andrzej Siewior
2018-11-07 19:48 ` [PATCH 09/23] x86/fpu: Remove user_fpu_begin() Sebastian Andrzej Siewior
2018-11-07 19:48 ` [PATCH 10/23] x86/entry: Remove _TIF_ALLWORK_MASK Sebastian Andrzej Siewior
2018-11-07 19:48 ` [PATCH 11/23] x86/fpu: Add (__)make_fpregs_active helpers Sebastian Andrzej Siewior
2018-11-07 19:48 ` [PATCH 12/23] x86/fpu: Make __raw_xsave_addr() use feature number instead of mask Sebastian Andrzej Siewior
2018-11-07 19:48 ` [PATCH 13/23] x86/fpu: Make get_xsave_field_ptr() and get_xsave_addr() " Sebastian Andrzej Siewior
2018-11-07 19:48 ` [PATCH 14/23] x86/pkeys: Make init_pkru_value static Sebastian Andrzej Siewior
2018-11-07 19:48 ` [PATCH 15/23] x86/fpu: Only write PKRU if it is different from current Sebastian Andrzej Siewior
2018-11-07 19:48 ` [PATCH 16/23] x86/pkeys: Don't check if PKRU is zero before writting it Sebastian Andrzej Siewior
2018-11-07 19:48 ` [PATCH 17/23] x86/fpu: Eager switch PKRU state Sebastian Andrzej Siewior
2018-11-08 11:12 ` Paolo Bonzini
2018-11-19 18:17 ` Sebastian Andrzej Siewior
2018-11-07 19:48 ` [PATCH 18/23] x86/entry: Add TIF_NEED_FPU_LOAD Sebastian Andrzej Siewior
2018-11-07 19:48 ` [PATCH 19/23] x86/fpu: Always store the registers in copy_fpstate_to_sigframe() Sebastian Andrzej Siewior
2018-11-07 19:48 ` [PATCH 20/23] x86/fpu: Prepare copy_fpstate_to_sigframe() for TIF_NEED_FPU_LOAD Sebastian Andrzej Siewior
2018-11-07 19:48 ` Sebastian Andrzej Siewior [this message]
2018-11-07 19:48 ` [PATCH 22/23] x86/fpu: Don't restore the FPU state directly from userland in __fpu__restore_sig() Sebastian Andrzej Siewior
2018-11-08 18:25 ` Andy Lutomirski
2018-11-09 19:09 ` Sebastian Andrzej Siewior
2018-11-07 19:48 ` [PATCH 23/23] x86/fpu: Defer FPU state load until return to userspace Sebastian Andrzej Siewior
2018-11-08 8:33 ` Sebastian Andrzej Siewior
2018-11-12 3:02 ` [PATCH v4] x86: load FPU registers on return to userland Wanpeng Li
2018-11-12 3:26 ` Jason A. Donenfeld
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20181107194858.9380-22-bigeasy@linutronix.de \
--to=bigeasy@linutronix.de \
--cc=Jason@zx2c4.com \
--cc=dave.hansen@linux.intel.com \
--cc=kvm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=luto@kernel.org \
--cc=pbonzini@redhat.com \
--cc=riel@surriel.com \
--cc=rkrcmar@redhat.com \
--cc=x86@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox