From e4db2db596f9b875af2f56305490641970d07d38 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Fri, 20 Jun 2025 17:56:21 +0200 Subject: [PATCH] 6.12-stable patches added patches: x86-pkeys-simplify-pkru-update-in-signal-frame.patch --- queue-6.12/series | 1 + ...simplify-pkru-update-in-signal-frame.patch | 70 +++++++++++++++++++ 2 files changed, 71 insertions(+) create mode 100644 queue-6.12/x86-pkeys-simplify-pkru-update-in-signal-frame.patch diff --git a/queue-6.12/series b/queue-6.12/series index 985d8893af..d51c549431 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 0000000000..63553746e0 --- /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" +Date: Tue, 15 Apr 2025 19:16:58 -0700 +Subject: x86/pkeys: Simplify PKRU update in signal frame + +From: Chang S. Bae + +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 +Signed-off-by: Ingo Molnar +Cc: Andy Lutomirski +Cc: Aruna Ramakrishna +Cc: H. Peter Anvin +Cc: Linus Torvalds +Cc: Oleg Nesterov +Cc: Tony W Wang-oc +Cc: Dave Hansen +Link: https://lore.kernel.org/r/20250416021720.12305-9-chang.seok.bae@intel.com +Cc: Ben Hutchings +Link: https://lore.kernel.org/r/103664a92055a889a08cfc7bbe30084c6cb96eda.camel@decadent.org.uk +Signed-off-by: Greg Kroah-Hartman +--- + 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; + } -- 2.47.2