111 lines
4.1 KiB
Diff
111 lines
4.1 KiB
Diff
From 077f4f2e376a6489736ee5994db3539593941c0c Mon Sep 17 00:00:00 2001
|
|
From: "Borislav Petkov (AMD)" <bp@alien8.de>
|
|
Date: Thu, 26 Jan 2023 00:08:03 +0100
|
|
Subject: [PATCH 21/36] x86/microcode/AMD: Add a @cpu parameter to the
|
|
reloading functions
|
|
|
|
Will be used in a subsequent change.
|
|
|
|
Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de>
|
|
Link: https://lore.kernel.org/r/20230130161709.11615-3-bp@alien8.de
|
|
(cherry picked from commit a5ad92134bd153a9ccdcddf09a95b088f36c3cce)
|
|
|
|
CVE: CVE-2023-20593
|
|
Signed-off-by: Mridula Shastry <mridula.c.shastry@oracle.com>
|
|
Reviewed-by: Todd Vierling <todd.vierling@oracle.com>
|
|
---
|
|
arch/x86/include/asm/microcode.h | 4 ++--
|
|
arch/x86/include/asm/microcode_amd.h | 4 ++--
|
|
arch/x86/kernel/cpu/microcode/amd.c | 2 +-
|
|
arch/x86/kernel/cpu/microcode/core.c | 6 +++---
|
|
4 files changed, 8 insertions(+), 8 deletions(-)
|
|
|
|
diff --git a/arch/x86/include/asm/microcode.h b/arch/x86/include/asm/microcode.h
|
|
index e65c39a1f5fa..67051a58a18b 100644
|
|
--- a/arch/x86/include/asm/microcode.h
|
|
+++ b/arch/x86/include/asm/microcode.h
|
|
@@ -125,7 +125,7 @@ static inline unsigned int x86_cpuid_family(void)
|
|
int __init microcode_init(void);
|
|
extern void __init load_ucode_bsp(void);
|
|
extern void load_ucode_ap(void);
|
|
-void reload_early_microcode(void);
|
|
+void reload_early_microcode(unsigned int cpu);
|
|
extern bool get_builtin_firmware(struct cpio_data *cd, const char *name);
|
|
extern bool initrd_gone;
|
|
void microcode_bsp_resume(void);
|
|
@@ -133,7 +133,7 @@ void microcode_bsp_resume(void);
|
|
static inline int __init microcode_init(void) { return 0; };
|
|
static inline void __init load_ucode_bsp(void) { }
|
|
static inline void load_ucode_ap(void) { }
|
|
-static inline void reload_early_microcode(void) { }
|
|
+static inline void reload_early_microcode(unsigned int cpu) { }
|
|
static inline bool
|
|
get_builtin_firmware(struct cpio_data *cd, const char *name) { return false; }
|
|
static inline void microcode_bsp_resume(void) { }
|
|
diff --git a/arch/x86/include/asm/microcode_amd.h b/arch/x86/include/asm/microcode_amd.h
|
|
index 7063b5a43220..a645b25ee442 100644
|
|
--- a/arch/x86/include/asm/microcode_amd.h
|
|
+++ b/arch/x86/include/asm/microcode_amd.h
|
|
@@ -47,12 +47,12 @@ struct microcode_amd {
|
|
extern void __init load_ucode_amd_bsp(unsigned int family);
|
|
extern void load_ucode_amd_ap(unsigned int family);
|
|
extern int __init save_microcode_in_initrd_amd(unsigned int family);
|
|
-void reload_ucode_amd(void);
|
|
+void reload_ucode_amd(unsigned int cpu);
|
|
#else
|
|
static inline void __init load_ucode_amd_bsp(unsigned int family) {}
|
|
static inline void load_ucode_amd_ap(unsigned int family) {}
|
|
static inline int __init
|
|
save_microcode_in_initrd_amd(unsigned int family) { return -EINVAL; }
|
|
-static inline void reload_ucode_amd(void) {}
|
|
+static inline void reload_ucode_amd(unsigned int cpu) {}
|
|
#endif
|
|
#endif /* _ASM_X86_MICROCODE_AMD_H */
|
|
diff --git a/arch/x86/kernel/cpu/microcode/amd.c b/arch/x86/kernel/cpu/microcode/amd.c
|
|
index 68643a68fa11..6ab27650f8a7 100644
|
|
--- a/arch/x86/kernel/cpu/microcode/amd.c
|
|
+++ b/arch/x86/kernel/cpu/microcode/amd.c
|
|
@@ -572,7 +572,7 @@ int __init save_microcode_in_initrd_amd(unsigned int cpuid_1_eax)
|
|
return 0;
|
|
}
|
|
|
|
-void reload_ucode_amd(void)
|
|
+void reload_ucode_amd(unsigned int cpu)
|
|
{
|
|
struct microcode_amd *mc;
|
|
u32 rev, dummy __always_unused;
|
|
diff --git a/arch/x86/kernel/cpu/microcode/core.c b/arch/x86/kernel/cpu/microcode/core.c
|
|
index 6cd0db1e7b96..681df41e5b69 100644
|
|
--- a/arch/x86/kernel/cpu/microcode/core.c
|
|
+++ b/arch/x86/kernel/cpu/microcode/core.c
|
|
@@ -317,7 +317,7 @@ struct cpio_data find_microcode_in_initrd(const char *path, bool use_pa)
|
|
#endif
|
|
}
|
|
|
|
-void reload_early_microcode(void)
|
|
+void reload_early_microcode(unsigned int cpu)
|
|
{
|
|
int vendor, family;
|
|
|
|
@@ -331,7 +331,7 @@ void reload_early_microcode(void)
|
|
break;
|
|
case X86_VENDOR_AMD:
|
|
if (family >= 0x10)
|
|
- reload_ucode_amd();
|
|
+ reload_ucode_amd(cpu);
|
|
break;
|
|
default:
|
|
break;
|
|
@@ -586,7 +586,7 @@ void microcode_bsp_resume(void)
|
|
if (uci->mc)
|
|
microcode_ops->apply_microcode(cpu);
|
|
else
|
|
- reload_early_microcode();
|
|
+ reload_early_microcode(cpu);
|
|
}
|
|
|
|
static struct syscore_ops mc_syscore_ops = {
|
|
--
|
|
2.39.3
|
|
|