Skip to content

Commit

Permalink
x86/mtrr: Check if fixed MTRRs exist before saving them
Browse files Browse the repository at this point in the history
MTRRs have an obsolete fixed variant for fine grained caching control
of the 640K-1MB region that uses separate MSRs. This fixed variant has
a separate capability bit in the MTRR capability MSR.

So far all x86 CPUs which support MTRR have this separate bit set, so it
went unnoticed that mtrr_save_state() does not check the capability bit
before accessing the fixed MTRR MSRs.

Though on a CPU that does not support the fixed MTRR capability this
results in a #GP.  The #GP itself is harmless because the RDMSR fault is
handled gracefully, but results in a WARN_ON().

Add the missing capability check to prevent this.

Fixes: 2b1f627 ("[PATCH] x86: Save the MTRRs of the BSP before booting an AP")
Signed-off-by: Andi Kleen <ak@linux.intel.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Cc: stable@vger.kernel.org
Link: https://lore.kernel.org/all/20240808000244.946864-1-ak@linux.intel.com
  • Loading branch information
Andi Kleen authored and KAGA-KOKO committed Aug 8, 2024
1 parent e639222 commit 919f18f
Showing 1 changed file with 1 addition and 1 deletion.
2 changes: 1 addition & 1 deletion arch/x86/kernel/cpu/mtrr/mtrr.c
Original file line number Diff line number Diff line change
Expand Up @@ -609,7 +609,7 @@ void mtrr_save_state(void)
{
int first_cpu;

if (!mtrr_enabled())
if (!mtrr_enabled() || !mtrr_state.have_fixed)
return;

first_cpu = cpumask_first(cpu_online_mask);
Expand Down

0 comments on commit 919f18f

Please sign in to comment.