| From 9b8493dc43044376716d789d07699f17d538a7c4 Mon Sep 17 00:00:00 2001 |
| From: "Borislav Petkov (AMD)" <bp@alien8.de> |
| Date: Fri, 1 Dec 2023 19:37:27 +0100 |
| Subject: x86/CPU/AMD: Check vendor in the AMD microcode callback |
| |
| From: Borislav Petkov (AMD) <bp@alien8.de> |
| |
| commit 9b8493dc43044376716d789d07699f17d538a7c4 upstream. |
| |
| Commit in Fixes added an AMD-specific microcode callback. However, it |
| didn't check the CPU vendor the kernel runs on explicitly. |
| |
| The only reason the Zenbleed check in it didn't run on other x86 vendors |
| hardware was pure coincidental luck: |
| |
| if (!cpu_has_amd_erratum(c, amd_zenbleed)) |
| return; |
| |
| gives true on other vendors because they don't have those families and |
| models. |
| |
| However, with the removal of the cpu_has_amd_erratum() in |
| |
| 05f5f73936fa ("x86/CPU/AMD: Drop now unused CPU erratum checking function") |
| |
| that coincidental condition is gone, leading to the zenbleed check |
| getting executed on other vendors too. |
| |
| Add the explicit vendor check for the whole callback as it should've |
| been done in the first place. |
| |
| Fixes: 522b1d69219d ("x86/cpu/amd: Add a Zenbleed fix") |
| Cc: <stable@kernel.org> |
| Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de> |
| Link: https://lore.kernel.org/r/20231201184226.16749-1-bp@alien8.de |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| arch/x86/kernel/cpu/amd.c | 3 +++ |
| 1 file changed, 3 insertions(+) |
| |
| --- a/arch/x86/kernel/cpu/amd.c |
| +++ b/arch/x86/kernel/cpu/amd.c |
| @@ -1315,6 +1315,9 @@ static void zenbleed_check_cpu(void *unu |
| |
| void amd_check_microcode(void) |
| { |
| + if (boot_cpu_data.x86_vendor != X86_VENDOR_AMD) |
| + return; |
| + |
| on_each_cpu(zenbleed_check_cpu, NULL, 1); |
| } |
| |