1 From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
2 From: "Borislav Petkov (AMD)" <bp@alien8.de>
3 Date: Sat, 7 Oct 2023 12:57:02 +0200
4 Subject: [PATCH] x86/cpu: Fix AMD erratum #1485 on Zen4-based CPUs
6 Content-Type: text/plain; charset=UTF-8
7 Content-Transfer-Encoding: 8bit
9 Fix erratum #1485 on Zen4 parts where running with STIBP disabled can
10 cause an #UD exception. The performance impact of the fix is negligible.
12 Reported-by: René Rebe <rene@exactcode.de>
13 Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de>
14 Tested-by: René Rebe <rene@exactcode.de>
15 Cc: <stable@kernel.org>
16 Link: https://lore.kernel.org/r/D99589F4-BC5D-430B-87B2-72C20370CF57@exactcode.com
17 Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
19 arch/x86/include/asm/msr-index.h | 9 +++++++--
20 arch/x86/kernel/cpu/amd.c | 8 ++++++++
21 2 files changed, 15 insertions(+), 2 deletions(-)
23 diff --git a/arch/x86/include/asm/msr-index.h b/arch/x86/include/asm/msr-index.h
24 index 1d111350197f..b37abb55e948 100644
25 --- a/arch/x86/include/asm/msr-index.h
26 +++ b/arch/x86/include/asm/msr-index.h
28 /* AMD Last Branch Record MSRs */
29 #define MSR_AMD64_LBR_SELECT 0xc000010e
32 -#define MSR_F17H_IRPERF 0xc00000e9
34 +#define MSR_ZEN4_BP_CFG 0xc001102e
35 +#define MSR_ZEN4_BP_CFG_SHARED_BTB_FIX_BIT 5
38 #define MSR_ZEN2_SPECTRAL_CHICKEN 0xc00110e3
39 #define MSR_ZEN2_SPECTRAL_CHICKEN_BIT BIT_ULL(1)
42 +#define MSR_F17H_IRPERF 0xc00000e9
45 #define MSR_F16H_L2I_PERF_CTL 0xc0010230
46 #define MSR_F16H_L2I_PERF_CTR 0xc0010231
47 diff --git a/arch/x86/kernel/cpu/amd.c b/arch/x86/kernel/cpu/amd.c
48 index 7eca6a8abbb1..981bc23665a3 100644
49 --- a/arch/x86/kernel/cpu/amd.c
50 +++ b/arch/x86/kernel/cpu/amd.c
51 @@ -80,6 +80,10 @@ static const int amd_div0[] =
52 AMD_LEGACY_ERRATUM(AMD_MODEL_RANGE(0x17, 0x00, 0x0, 0x2f, 0xf),
53 AMD_MODEL_RANGE(0x17, 0x50, 0x0, 0x5f, 0xf));
55 +static const int amd_erratum_1485[] =
56 + AMD_LEGACY_ERRATUM(AMD_MODEL_RANGE(0x19, 0x10, 0x0, 0x1f, 0xf),
57 + AMD_MODEL_RANGE(0x19, 0x60, 0x0, 0xaf, 0xf));
59 static bool cpu_has_amd_erratum(struct cpuinfo_x86 *cpu, const int *erratum)
61 int osvw_id = *erratum++;
62 @@ -1140,6 +1144,10 @@ static void init_amd(struct cpuinfo_x86 *c)
63 pr_notice_once("AMD Zen1 DIV0 bug detected. Disable SMT for full protection.\n");
64 setup_force_cpu_bug(X86_BUG_DIV0);
67 + if (!cpu_has(c, X86_FEATURE_HYPERVISOR) &&
68 + cpu_has_amd_erratum(c, amd_erratum_1485))
69 + msr_set_bit(MSR_ZEN4_BP_CFG, MSR_ZEN4_BP_CFG_SHARED_BTB_FIX_BIT);