[SRU][J][PATCH v2 04/20] x86/CPU/AMD: Carve out the erratum 1386 fix
Juerg Haefliger
juerg.haefliger at canonical.com
Mon Oct 20 14:19:51 UTC 2025
From: "Borislav Petkov (AMD)" <bp at alien8.de>
Call it on the affected CPU generations.
No functional changes.
Signed-off-by: Borislav Petkov (AMD) <bp at alien8.de>
Reviewed-by: Nikolay Borisov <nik.borisov at suse.com>
Link: http://lore.kernel.org/r/20231120104152.13740-3-bp@alien8.de
(backported from commit a7c32a1ae9ee43abfe884f5af376877c4301d166)
[juergh: Adjusted context due to commit:
4a3beb84ba8e ("x86/CPU/AMD: Improve the erratum 1386 workaround")]
CVE-2024-53114
Signed-off-by: Juerg Haefliger <juerg.haefliger at canonical.com>
---
arch/x86/kernel/cpu/amd.c | 36 +++++++++++++++++++++---------------
1 file changed, 21 insertions(+), 15 deletions(-)
diff --git a/arch/x86/kernel/cpu/amd.c b/arch/x86/kernel/cpu/amd.c
index 9399defbf173..000f7643a2b6 100644
--- a/arch/x86/kernel/cpu/amd.c
+++ b/arch/x86/kernel/cpu/amd.c
@@ -1042,6 +1042,25 @@ static const struct x86_cpu_desc erratum_1386_microcode[] = {
{},
};
+static void fix_erratum_1386(struct cpuinfo_x86 *c)
+{
+ /*
+ * Work around Erratum 1386. The XSAVES instruction malfunctions in
+ * certain circumstances on Zen1/2 uarch, and not all parts have had
+ * updated microcode at the time of writing (March 2023).
+ *
+ * Affected parts all have no supervisor XSAVE states, meaning that
+ * the XSAVEC instruction (which works fine) is equivalent.
+ *
+ * Clear the feature flag only on microcode revisions which
+ * don't have the fix.
+ */
+ if (x86_cpu_has_min_microcode_rev(erratum_1386_microcode))
+ return;
+
+ clear_cpu_cap(c, X86_FEATURE_XSAVES);
+}
+
void init_spectral_chicken(struct cpuinfo_x86 *c)
{
#ifdef CONFIG_CPU_UNRET_ENTRY
@@ -1062,21 +1081,6 @@ void init_spectral_chicken(struct cpuinfo_x86 *c)
}
}
#endif
- /*
- * Work around Erratum 1386. The XSAVES instruction malfunctions in
- * certain circumstances on Zen1/2 uarch, and not all parts have had
- * updated microcode at the time of writing (March 2023).
- *
- * Affected parts all have no supervisor XSAVE states, meaning that
- * the XSAVEC instruction (which works fine) is equivalent.
- *
- * Clear the feature flag only on microcode revisions which
- * don't have the fix.
- */
- if (x86_cpu_has_min_microcode_rev(erratum_1386_microcode))
- return;
-
- clear_cpu_cap(c, X86_FEATURE_XSAVES);
}
static void init_amd_zn(struct cpuinfo_x86 *c)
@@ -1145,10 +1149,12 @@ static void zenbleed_check(struct cpuinfo_x86 *c)
static void init_amd_zen(struct cpuinfo_x86 *c)
{
+ fix_erratum_1386(c);
}
static void init_amd_zen2(struct cpuinfo_x86 *c)
{
+ fix_erratum_1386(c);
}
static void init_amd_zen3(struct cpuinfo_x86 *c)
--
2.48.1
More information about the kernel-team
mailing list