aboutsummaryrefslogtreecommitdiffstats
diff options
-rw-r--r--queue-6.15/series1
-rw-r--r--queue-6.15/x86-pkeys-simplify-pkru-update-in-signal-frame.patch70
2 files changed, 71 insertions, 0 deletions
diff --git a/queue-6.15/series b/queue-6.15/series
index dcd47b4adb2..9e09566b2c7 100644
--- a/queue-6.15/series
+++ b/queue-6.15/series
@@ -487,3 +487,4 @@ sched_ext-sched-core-don-t-call-scx_group_set_weight-prematurely-from-sched_crea
atm-revert-atm_account_tx-if-copy_from_iter_full-fails.patch
drm-nouveau-nvkm-factor-out-current-gsp-rpc-command-policies.patch
drm-nouveau-nvkm-introduce-new-gsp-reply-policy-nvkm_gsp_rpc_reply_poll.patch
+x86-pkeys-simplify-pkru-update-in-signal-frame.patch
diff --git a/queue-6.15/x86-pkeys-simplify-pkru-update-in-signal-frame.patch b/queue-6.15/x86-pkeys-simplify-pkru-update-in-signal-frame.patch
new file mode 100644
index 00000000000..67b9c8fcb08
--- /dev/null
+++ b/queue-6.15/x86-pkeys-simplify-pkru-update-in-signal-frame.patch
@@ -0,0 +1,70 @@
+From d1e420772cd1eb0afe5858619c73ce36f3e781a1 Mon Sep 17 00:00:00 2001
+From: "Chang S. Bae" <chang.seok.bae@intel.com>
+Date: Tue, 15 Apr 2025 19:16:58 -0700
+Subject: x86/pkeys: Simplify PKRU update in signal frame
+
+From: Chang S. Bae <chang.seok.bae@intel.com>
+
+commit d1e420772cd1eb0afe5858619c73ce36f3e781a1 upstream.
+
+The signal delivery logic was modified to always set the PKRU bit in
+xregs_state->header->xfeatures by this commit:
+
+ ae6012d72fa6 ("x86/pkeys: Ensure updated PKRU value is XRSTOR'd")
+
+However, the change derives the bitmask value using XGETBV(1), rather
+than simply updating the buffer that already holds the value. Thus, this
+approach induces an unnecessary dependency on XGETBV1 for PKRU handling.
+
+Eliminate the dependency by using the established helper function.
+Subsequently, remove the now-unused 'mask' argument.
+
+Signed-off-by: Chang S. Bae <chang.seok.bae@intel.com>
+Signed-off-by: Ingo Molnar <mingo@kernel.org>
+Cc: Andy Lutomirski <luto@kernel.org>
+Cc: Aruna Ramakrishna <aruna.ramakrishna@oracle.com>
+Cc: H. Peter Anvin <hpa@zytor.com>
+Cc: Linus Torvalds <torvalds@linux-foundation.org>
+Cc: Oleg Nesterov <oleg@redhat.com>
+Cc: Tony W Wang-oc <TonyWWang-oc@zhaoxin.com>
+Cc: Dave Hansen <dave.hansen@linux.intel.com>
+Link: https://lore.kernel.org/r/20250416021720.12305-9-chang.seok.bae@intel.com
+Cc: Ben Hutchings <ben@decadent.org.uk>
+Link: https://lore.kernel.org/r/103664a92055a889a08cfc7bbe30084c6cb96eda.camel@decadent.org.uk
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ arch/x86/kernel/fpu/xstate.h | 9 +++------
+ 1 file changed, 3 insertions(+), 6 deletions(-)
+
+--- a/arch/x86/kernel/fpu/xstate.h
++++ b/arch/x86/kernel/fpu/xstate.h
+@@ -72,18 +72,15 @@ static inline u64 xfeatures_mask_indepen
+ /*
+ * Update the value of PKRU register that was already pushed onto the signal frame.
+ */
+-static inline int update_pkru_in_sigframe(struct xregs_state __user *buf, u64 mask, u32 pkru)
++static inline int update_pkru_in_sigframe(struct xregs_state __user *buf, u32 pkru)
+ {
+- u64 xstate_bv;
+ int err;
+
+ if (unlikely(!cpu_feature_enabled(X86_FEATURE_OSPKE)))
+ return 0;
+
+ /* Mark PKRU as in-use so that it is restored correctly. */
+- xstate_bv = (mask & xfeatures_in_use()) | XFEATURE_MASK_PKRU;
+-
+- err = __put_user(xstate_bv, &buf->header.xfeatures);
++ err = set_xfeature_in_sigframe(buf, XFEATURE_MASK_PKRU);
+ if (err)
+ return err;
+
+@@ -307,7 +304,7 @@ static inline int xsave_to_user_sigframe
+ clac();
+
+ if (!err)
+- err = update_pkru_in_sigframe(buf, mask, pkru);
++ err = update_pkru_in_sigframe(buf, pkru);
+
+ return err;
+ }