|
Borislav Petkov |
aece49 |
From: Pawan Gupta <pawan.kumar.gupta@linux.intel.com>
|
|
Borislav Petkov |
aece49 |
Date: Mon, 4 Apr 2022 17:35:45 -0700
|
|
Borislav Petkov |
aece49 |
Subject: x86/speculation: Restore speculation related MSRs during S3 resume
|
|
Borislav Petkov |
aece49 |
Git-commit: e2a1256b17b16f9b9adf1b6fea56819e7b68e463
|
|
Borislav Petkov |
aece49 |
Patch-mainline: v5.18 or v5.18-rc2 (next release)
|
|
Borislav Petkov |
aece49 |
References: bsc#1198400
|
|
Borislav Petkov |
aece49 |
|
|
Borislav Petkov |
aece49 |
After resuming from suspend-to-RAM, the MSRs that control CPU's
|
|
Borislav Petkov |
aece49 |
speculative execution behavior are not being restored on the boot CPU.
|
|
Borislav Petkov |
aece49 |
|
|
Borislav Petkov |
aece49 |
These MSRs are used to mitigate speculative execution vulnerabilities.
|
|
Borislav Petkov |
aece49 |
Not restoring them correctly may leave the CPU vulnerable. Secondary
|
|
Borislav Petkov |
aece49 |
CPU's MSRs are correctly being restored at S3 resume by
|
|
Borislav Petkov |
aece49 |
identify_secondary_cpu().
|
|
Borislav Petkov |
aece49 |
|
|
Borislav Petkov |
aece49 |
During S3 resume, restore these MSRs for boot CPU when restoring its
|
|
Borislav Petkov |
aece49 |
processor state.
|
|
Borislav Petkov |
aece49 |
|
|
Borislav Petkov |
aece49 |
Fixes: 772439717dbf ("x86/bugs/intel: Set proper CPU features and setup RDS")
|
|
Borislav Petkov |
aece49 |
Reported-by: Neelima Krishnan <neelima.krishnan@intel.com>
|
|
Borislav Petkov |
aece49 |
Signed-off-by: Pawan Gupta <pawan.kumar.gupta@linux.intel.com>
|
|
Borislav Petkov |
aece49 |
Tested-by: Neelima Krishnan <neelima.krishnan@intel.com>
|
|
Borislav Petkov |
aece49 |
Acked-by: Borislav Petkov <bp@suse.de>
|
|
Borislav Petkov |
aece49 |
Reviewed-by: Dave Hansen <dave.hansen@linux.intel.com>
|
|
Borislav Petkov |
aece49 |
Cc: stable@vger.kernel.org
|
|
Borislav Petkov |
aece49 |
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
|
|
Borislav Petkov |
aece49 |
---
|
|
Borislav Petkov |
aece49 |
arch/x86/power/cpu.c | 14 ++++++++++++++
|
|
Borislav Petkov |
aece49 |
1 file changed, 14 insertions(+)
|
|
Borislav Petkov |
aece49 |
|
|
Borislav Petkov |
aece49 |
diff --git a/arch/x86/power/cpu.c b/arch/x86/power/cpu.c
|
|
Borislav Petkov |
aece49 |
index eaec0cb3fe04..3822666fb73d 100644
|
|
Borislav Petkov |
aece49 |
--- a/arch/x86/power/cpu.c
|
|
Borislav Petkov |
aece49 |
+++ b/arch/x86/power/cpu.c
|
|
Borislav Petkov |
aece49 |
@@ -503,10 +503,24 @@ static int pm_cpu_check(const struct x86_cpu_id *c)
|
|
Borislav Petkov |
aece49 |
return ret;
|
|
Borislav Petkov |
aece49 |
}
|
|
Borislav Petkov |
aece49 |
|
|
Borislav Petkov |
aece49 |
+static void pm_save_spec_msr(void)
|
|
Borislav Petkov |
aece49 |
+{
|
|
Borislav Petkov |
aece49 |
+ u32 spec_msr_id[] = {
|
|
Borislav Petkov |
aece49 |
+ MSR_IA32_SPEC_CTRL,
|
|
Borislav Petkov |
aece49 |
+ MSR_IA32_TSX_CTRL,
|
|
Borislav Petkov |
aece49 |
+ MSR_TSX_FORCE_ABORT,
|
|
Borislav Petkov |
aece49 |
+ MSR_IA32_MCU_OPT_CTRL,
|
|
Borislav Petkov |
aece49 |
+ MSR_AMD64_LS_CFG,
|
|
Borislav Petkov |
aece49 |
+ };
|
|
Borislav Petkov |
aece49 |
+
|
|
Borislav Petkov |
aece49 |
+ msr_build_context(spec_msr_id, ARRAY_SIZE(spec_msr_id));
|
|
Borislav Petkov |
aece49 |
+}
|
|
Borislav Petkov |
aece49 |
+
|
|
Borislav Petkov |
aece49 |
static int pm_check_save_msr(void)
|
|
Borislav Petkov |
aece49 |
{
|
|
Borislav Petkov |
aece49 |
dmi_check_system(msr_save_dmi_table);
|
|
Borislav Petkov |
aece49 |
pm_cpu_check(msr_save_cpu_table);
|
|
Borislav Petkov |
aece49 |
+ pm_save_spec_msr();
|
|
Borislav Petkov |
aece49 |
|
|
Borislav Petkov |
aece49 |
return 0;
|
|
Borislav Petkov |
aece49 |
}
|
|
Borislav Petkov |
aece49 |
|