Borislav Petkov cc5a89
From: Pawan Gupta <pawan.kumar.gupta@linux.intel.com>
Borislav Petkov cc5a89
Date: Thu, 19 May 2022 20:30:12 -0700
Borislav Petkov cc5a89
Subject: x86/bugs: Group MDS, TAA & Processor MMIO Stale Data mitigations
Borislav Petkov cc5a89
Git-commit: e5925fb867290ee924fcf2fe3ca887b792714366
Borislav Petkov cc5a89
Git-repo: git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git
Borislav Petkov cc5a89
Patch-mainline: Queued in tip for v5.19
Borislav Petkov cc5a89
References: bsc#1199650 CVE-2022-21166 CVE-2022-21127 CVE-2022-21123 CVE-2022-21125 CVE-2022-21180
Borislav Petkov cc5a89
Borislav Petkov cc5a89
MDS, TAA and Processor MMIO Stale Data mitigations rely on clearing CPU
Borislav Petkov cc5a89
buffers. Moreover, status of these mitigations affects each other.
Borislav Petkov cc5a89
During boot, it is important to maintain the order in which these
Borislav Petkov cc5a89
mitigations are selected. This is especially true for
Borislav Petkov cc5a89
md_clear_update_mitigation() that needs to be called after MDS, TAA and
Borislav Petkov cc5a89
Processor MMIO Stale Data mitigation selection is done.
Borislav Petkov cc5a89
Borislav Petkov cc5a89
Introduce md_clear_select_mitigation(), and select all these mitigations
Borislav Petkov cc5a89
from there. This reflects relationships between these mitigations and
Borislav Petkov cc5a89
ensures proper ordering.
Borislav Petkov cc5a89
Borislav Petkov cc5a89
Signed-off-by: Pawan Gupta <pawan.kumar.gupta@linux.intel.com>
Borislav Petkov cc5a89
Signed-off-by: Borislav Petkov <bp@suse.de>
Borislav Petkov cc5a89
---
Borislav Petkov cc5a89
 arch/x86/kernel/cpu/bugs.c |   26 ++++++++++++++++----------
Borislav Petkov cc5a89
 1 file changed, 16 insertions(+), 10 deletions(-)
Borislav Petkov cc5a89
Borislav Petkov cc5a89
--- a/arch/x86/kernel/cpu/bugs.c
Borislav Petkov cc5a89
+++ b/arch/x86/kernel/cpu/bugs.c
Borislav Petkov cc5a89
@@ -40,6 +40,7 @@ static void __init ssb_select_mitigation
Borislav Petkov cc5a89
 static void __init l1tf_select_mitigation(void);
Borislav Petkov cc5a89
 static void __init mds_select_mitigation(void);
Borislav Petkov cc5a89
 static void __init md_clear_update_mitigation(void);
Borislav Petkov cc5a89
+static void __init md_clear_select_mitigation(void);
Borislav Petkov cc5a89
 static void __init taa_select_mitigation(void);
Borislav Petkov cc5a89
 static void __init mmio_select_mitigation(void);
Borislav Petkov cc5a89
 static void __init srbds_select_mitigation(void);
Borislav Petkov cc5a89
@@ -112,18 +113,9 @@ void __init check_bugs(void)
Borislav Petkov cc5a89
 	spectre_v2_select_mitigation();
Borislav Petkov cc5a89
 	ssb_select_mitigation();
Borislav Petkov cc5a89
 	l1tf_select_mitigation();
Borislav Petkov cc5a89
-	mds_select_mitigation();
Borislav Petkov cc5a89
-	taa_select_mitigation();
Borislav Petkov cc5a89
-	mmio_select_mitigation();
Borislav Petkov cc5a89
+	md_clear_select_mitigation();
Borislav Petkov cc5a89
 	srbds_select_mitigation();
Borislav Petkov cc5a89
 
Borislav Petkov cc5a89
-	/*
Borislav Petkov cc5a89
-	 * As MDS, TAA and MMIO Stale Data mitigations are inter-related, update
Borislav Petkov cc5a89
-	 * and print their mitigation after MDS, TAA and MMIO Stale Data
Borislav Petkov cc5a89
-	 * mitigation selection is done.
Borislav Petkov cc5a89
-	 */
Borislav Petkov cc5a89
-	md_clear_update_mitigation();
Borislav Petkov cc5a89
-
Borislav Petkov cc5a89
 	arch_smt_update();
Borislav Petkov cc5a89
 
Borislav Petkov cc5a89
 #ifdef CONFIG_X86_32
Borislav Petkov cc5a89
@@ -626,6 +618,20 @@ out:
Borislav Petkov cc5a89
 		pr_info("MMIO Stale Data: %s\n", mmio_strings[mmio_mitigation]);
Borislav Petkov cc5a89
 }
Borislav Petkov cc5a89
 
Borislav Petkov cc5a89
+static void __init md_clear_select_mitigation(void)
Borislav Petkov cc5a89
+{
Borislav Petkov cc5a89
+	mds_select_mitigation();
Borislav Petkov cc5a89
+	taa_select_mitigation();
Borislav Petkov cc5a89
+	mmio_select_mitigation();
Borislav Petkov cc5a89
+
Borislav Petkov cc5a89
+	/*
Borislav Petkov cc5a89
+	 * As MDS, TAA and MMIO Stale Data mitigations are inter-related, update
Borislav Petkov cc5a89
+	 * and print their mitigation after MDS, TAA and MMIO Stale Data
Borislav Petkov cc5a89
+	 * mitigation selection is done.
Borislav Petkov cc5a89
+	 */
Borislav Petkov cc5a89
+	md_clear_update_mitigation();
Borislav Petkov cc5a89
+}
Borislav Petkov cc5a89
+
Borislav Petkov cc5a89
 #undef pr_fmt
Borislav Petkov cc5a89
 #define pr_fmt(fmt)	"SRBDS: " fmt
Borislav Petkov cc5a89