aboutsummaryrefslogtreecommitdiffstats
diff options
-rw-r--r--queue-6.12/series1
-rw-r--r--queue-6.12/x86-pkeys-simplify-pkru-update-in-signal-frame.patch70
2 files changed, 71 insertions, 0 deletions
diff --git a/queue-6.12/series b/queue-6.12/series
index 985d8893af4..d51c5494310 100644
--- a/queue-6.12/series
+++ b/queue-6.12/series
@@ -324,3 +324,4 @@ platform-x86-intel-uncore-freq-fail-module-load-when-plat_info-is-null.patch
sched_ext-sched-core-don-t-call-scx_group_set_weight-prematurely-from-sched_create_group.patch
atm-revert-atm_account_tx-if-copy_from_iter_full-fails.patch
wifi-rtw89-phy-add-dummy-c2h-event-handler-for-report-of-tas-power.patch
+x86-pkeys-simplify-pkru-update-in-signal-frame.patch
diff --git a/queue-6.12/x86-pkeys-simplify-pkru-update-in-signal-frame.patch b/queue-6.12/x86-pkeys-simplify-pkru-update-in-signal-frame.patch
new file mode 100644
index 00000000000..63553746e0b
--- /dev/null
+++ b/queue-6.12/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;
+
+@@ -304,7 +301,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;
+ }