[PATCH 01/12] x86/mce: Fix hw MCE injection feature detection

From: isaku . yamahata
Date: Tue Oct 10 2023 - 04:35:52 EST


From: Isaku Yamahata <isaku.yamahata@xxxxxxxxx>

When initializing x86 MCE injection framework, it checks if hardware mce
injection is available or not. When it's not available on AMD, set the
boolean variable to false to not use it. The variable is on by default and
the feature is AMD specific based on the code.

Because the variable is default on, it is true on Intel platform (probably
on other non-AMD x86 platform). It results in unchecked msr access of
MSR_K7_HWCR=0xc0010015 when injecting MCE on Intel platform. (Probably on
other x86 platform.)

Make the variable of by default, and set the variable on when the hardware
feature is usable.

The procedure to produce on Intel platform.
echo hw > /sys/kernel/debug/mce-inject/flags
This succeeds.
set other MCE parameters if necessary.
echo 0 > /sys/kernel/debug/mce-inject/bank
This triggers mce injection.

The kernel accesses MSR_K7_HWCR=0xc0010015 resulting unchecked MSR access.

Fixes: 891e465a1bd8 ("x86/mce: Check whether writes to MCA_STATUS are getting ignored")
Signed-off-by: Isaku Yamahata <isaku.yamahata@xxxxxxxxx>
---
arch/x86/kernel/cpu/mce/inject.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/arch/x86/kernel/cpu/mce/inject.c b/arch/x86/kernel/cpu/mce/inject.c
index 4d8d4bcf915d..881898a1d2f4 100644
--- a/arch/x86/kernel/cpu/mce/inject.c
+++ b/arch/x86/kernel/cpu/mce/inject.c
@@ -33,7 +33,7 @@

#include "internal.h"

-static bool hw_injection_possible = true;
+static bool hw_injection_possible;

/*
* Collect all the MCi_XXX settings
@@ -732,6 +732,7 @@ static void check_hw_inj_possible(void)
if (!cpu_feature_enabled(X86_FEATURE_SMCA))
return;

+ hw_injection_possible = true;
cpu = get_cpu();

for (bank = 0; bank < MAX_NR_BANKS; ++bank) {
--
2.25.1