diff options
-rw-r--r-- | queue-6.15/series | 1 | ||||
-rw-r--r-- | queue-6.15/x86-pkeys-simplify-pkru-update-in-signal-frame.patch | 70 |
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; + } |