commit: 1142e63b91589e751e9f9e537c19cc52f96c790d Author: Mike Pagano <mpagano <AT> gentoo <DOT> org> AuthorDate: Sun Dec 15 00:02:06 2024 +0000 Commit: Mike Pagano <mpagano <AT> gentoo <DOT> org> CommitDate: Sun Dec 15 00:02:06 2024 +0000 URL: https://gitweb.gentoo.org/proj/linux-patches.git/commit/?id=1142e63b
Remove redundant patches Removed 1740_x86-pkeys-change-caller-of-update_pkru_in_sigframe.patch 1741_x86-pkeys-ensure-updated-pkru-value-is-xrstor-d.patch Signed-off-by: Mike Pagano <mpagano <AT> gentoo.org> 0000_README | 8 -- ...-change-caller-of-update_pkru_in_sigframe.patch | 107 --------------------- ...eys-ensure-updated-pkru-value-is-xrstor-d.patch | 96 ------------------ 3 files changed, 211 deletions(-) diff --git a/0000_README b/0000_README index 81c02320..a2c9782d 100644 --- a/0000_README +++ b/0000_README @@ -75,14 +75,6 @@ Patch: 1730_parisc-Disable-prctl.patch From: https://git.kernel.org/pub/scm/linux/kernel/git/deller/parisc-linux.git Desc: prctl: Temporarily disable prctl(PR_SET_MDWE) on parisc -Patch: 1740_x86-pkeys-change-caller-of-update_pkru_in_sigframe.patch -From: https://git.kernel.org/ -Desc: x86/pkeys: Change caller of update_pkru_in_sigframe() - -Patch: 1741_x86-pkeys-ensure-updated-pkru-value-is-xrstor-d.patch -From: https://git.kernel.org/ -Desc: x86/pkeys: Ensure updated PKRU value is XRSTOR'd - Patch: 2000_BT-Check-key-sizes-only-if-Secure-Simple-Pairing-enabled.patch From: https://lore.kernel.org/linux-bluetooth/[email protected]/raw Desc: Bluetooth: Check key sizes only when Secure Simple Pairing is enabled. See bug #686758 diff --git a/1740_x86-pkeys-change-caller-of-update_pkru_in_sigframe.patch b/1740_x86-pkeys-change-caller-of-update_pkru_in_sigframe.patch deleted file mode 100644 index 3a1fbd82..00000000 --- a/1740_x86-pkeys-change-caller-of-update_pkru_in_sigframe.patch +++ /dev/null @@ -1,107 +0,0 @@ -From 5683d0ce8fb46f36315a2b508f90ec6221cda018 Mon Sep 17 00:00:00 2001 -From: Sasha Levin <[email protected]> -Date: Tue, 19 Nov 2024 17:45:19 +0000 -Subject: x86/pkeys: Change caller of update_pkru_in_sigframe() - -From: Aruna Ramakrishna <[email protected]> - -[ Upstream commit 6a1853bdf17874392476b552398df261f75503e0 ] - -update_pkru_in_sigframe() will shortly need some information which -is only available inside xsave_to_user_sigframe(). Move -update_pkru_in_sigframe() inside the other function to make it -easier to provide it that information. - -No functional changes. - -Signed-off-by: Aruna Ramakrishna <[email protected]> -Signed-off-by: Dave Hansen <[email protected]> -Link: https://lore.kernel.org/all/20241119174520.3987538-2-aruna.ramakrishna%40oracle.com -Stable-dep-of: ae6012d72fa6 ("x86/pkeys: Ensure updated PKRU value is XRSTOR'd") -Signed-off-by: Sasha Levin <[email protected]> ---- - arch/x86/kernel/fpu/signal.c | 20 ++------------------ - arch/x86/kernel/fpu/xstate.h | 15 ++++++++++++++- - 2 files changed, 16 insertions(+), 19 deletions(-) - -diff --git a/arch/x86/kernel/fpu/signal.c b/arch/x86/kernel/fpu/signal.c -index 1065ab995305c..8f62e0666dea5 100644 ---- a/arch/x86/kernel/fpu/signal.c -+++ b/arch/x86/kernel/fpu/signal.c -@@ -63,16 +63,6 @@ static inline bool check_xstate_in_sigframe(struct fxregs_state __user *fxbuf, - return true; - } - --/* -- * 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, u32 pkru) --{ -- if (unlikely(!cpu_feature_enabled(X86_FEATURE_OSPKE))) -- return 0; -- return __put_user(pkru, (unsigned int __user *)get_xsave_addr_user(buf, XFEATURE_PKRU)); --} -- - /* - * Signal frame handlers. - */ -@@ -168,14 +158,8 @@ static inline bool save_xstate_epilog(void __user *buf, int ia32_frame, - - static inline int copy_fpregs_to_sigframe(struct xregs_state __user *buf, u32 pkru) - { -- int err = 0; -- -- if (use_xsave()) { -- err = xsave_to_user_sigframe(buf); -- if (!err) -- err = update_pkru_in_sigframe(buf, pkru); -- return err; -- } -+ if (use_xsave()) -+ return xsave_to_user_sigframe(buf, pkru); - - if (use_fxsr()) - return fxsave_to_user_sigframe((struct fxregs_state __user *) buf); -diff --git a/arch/x86/kernel/fpu/xstate.h b/arch/x86/kernel/fpu/xstate.h -index 0b86a5002c846..6b2924fbe5b8d 100644 ---- a/arch/x86/kernel/fpu/xstate.h -+++ b/arch/x86/kernel/fpu/xstate.h -@@ -69,6 +69,16 @@ static inline u64 xfeatures_mask_independent(void) - return fpu_kernel_cfg.independent_features; - } - -+/* -+ * 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, u32 pkru) -+{ -+ if (unlikely(!cpu_feature_enabled(X86_FEATURE_OSPKE))) -+ return 0; -+ return __put_user(pkru, (unsigned int __user *)get_xsave_addr_user(buf, XFEATURE_PKRU)); -+} -+ - /* XSAVE/XRSTOR wrapper functions */ - - #ifdef CONFIG_X86_64 -@@ -256,7 +266,7 @@ static inline u64 xfeatures_need_sigframe_write(void) - * The caller has to zero buf::header before calling this because XSAVE* - * does not touch the reserved fields in the header. - */ --static inline int xsave_to_user_sigframe(struct xregs_state __user *buf) -+static inline int xsave_to_user_sigframe(struct xregs_state __user *buf, u32 pkru) - { - /* - * Include the features which are not xsaved/rstored by the kernel -@@ -281,6 +291,9 @@ static inline int xsave_to_user_sigframe(struct xregs_state __user *buf) - XSTATE_OP(XSAVE, buf, lmask, hmask, err); - clac(); - -+ if (!err) -+ err = update_pkru_in_sigframe(buf, pkru); -+ - return err; - } - --- -2.43.0 - diff --git a/1741_x86-pkeys-ensure-updated-pkru-value-is-xrstor-d.patch b/1741_x86-pkeys-ensure-updated-pkru-value-is-xrstor-d.patch deleted file mode 100644 index 11b1f768..00000000 --- a/1741_x86-pkeys-ensure-updated-pkru-value-is-xrstor-d.patch +++ /dev/null @@ -1,96 +0,0 @@ -From 24fedf2768fd57e0d767137044c4f7493357b325 Mon Sep 17 00:00:00 2001 -From: Sasha Levin <[email protected]> -Date: Tue, 19 Nov 2024 17:45:20 +0000 -Subject: x86/pkeys: Ensure updated PKRU value is XRSTOR'd - -From: Aruna Ramakrishna <[email protected]> - -[ Upstream commit ae6012d72fa60c9ff92de5bac7a8021a47458e5b ] - -When XSTATE_BV[i] is 0, and XRSTOR attempts to restore state component -'i' it ignores any value in the XSAVE buffer and instead restores the -state component's init value. - -This means that if XSAVE writes XSTATE_BV[PKRU]=0 then XRSTOR will -ignore the value that update_pkru_in_sigframe() writes to the XSAVE buffer. - -XSTATE_BV[PKRU] only gets written as 0 if PKRU is in its init state. On -Intel CPUs, basically never happens because the kernel usually -overwrites the init value (aside: this is why we didn't notice this bug -until now). But on AMD, the init tracker is more aggressive and will -track PKRU as being in its init state upon any wrpkru(0x0). -Unfortunately, sig_prepare_pkru() does just that: wrpkru(0x0). - -This writes XSTATE_BV[PKRU]=0 which makes XRSTOR ignore the PKRU value -in the sigframe. - -To fix this, always overwrite the sigframe XSTATE_BV with a value that -has XSTATE_BV[PKRU]==1. This ensures that XRSTOR will not ignore what -update_pkru_in_sigframe() wrote. - -The problematic sequence of events is something like this: - -Userspace does: - * wrpkru(0xffff0000) (or whatever) - * Hardware sets: XINUSE[PKRU]=1 -Signal happens, kernel is entered: - * sig_prepare_pkru() => wrpkru(0x00000000) - * Hardware sets: XINUSE[PKRU]=0 (aggressive AMD init tracker) - * XSAVE writes most of XSAVE buffer, including - XSTATE_BV[PKRU]=XINUSE[PKRU]=0 - * update_pkru_in_sigframe() overwrites PKRU in XSAVE buffer -... signal handling - * XRSTOR sees XSTATE_BV[PKRU]==0, ignores just-written value - from update_pkru_in_sigframe() - -Fixes: 70044df250d0 ("x86/pkeys: Update PKRU to enable all pkeys before XSAVE") -Suggested-by: Rudi Horn <[email protected]> -Signed-off-by: Aruna Ramakrishna <[email protected]> -Signed-off-by: Dave Hansen <[email protected]> -Acked-by: Dave Hansen <[email protected]> -Link: https://lore.kernel.org/all/20241119174520.3987538-3-aruna.ramakrishna%40oracle.com -Signed-off-by: Sasha Levin <[email protected]> ---- - arch/x86/kernel/fpu/xstate.h | 16 ++++++++++++++-- - 1 file changed, 14 insertions(+), 2 deletions(-) - -diff --git a/arch/x86/kernel/fpu/xstate.h b/arch/x86/kernel/fpu/xstate.h -index 6b2924fbe5b8d..aa16f1a1bbcf1 100644 ---- a/arch/x86/kernel/fpu/xstate.h -+++ b/arch/x86/kernel/fpu/xstate.h -@@ -72,10 +72,22 @@ static inline u64 xfeatures_mask_independent(void) - /* - * 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, u32 pkru) -+static inline int update_pkru_in_sigframe(struct xregs_state __user *buf, u64 mask, 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); -+ if (err) -+ return err; -+ -+ /* Update PKRU value in the userspace xsave buffer. */ - return __put_user(pkru, (unsigned int __user *)get_xsave_addr_user(buf, XFEATURE_PKRU)); - } - -@@ -292,7 +304,7 @@ static inline int xsave_to_user_sigframe(struct xregs_state __user *buf, u32 pkr - clac(); - - if (!err) -- err = update_pkru_in_sigframe(buf, pkru); -+ err = update_pkru_in_sigframe(buf, mask, pkru); - - return err; - } --- -2.43.0 -
