Commit 8e853c45 authored by Marios Pomonis's avatar Marios Pomonis Committed by Khalid Elmously

KVM: x86: Protect MSR-based index computations in fixed_msr_to_seg_unit() from...

KVM: x86: Protect MSR-based index computations in fixed_msr_to_seg_unit() from Spectre-v1/L1TF attacks

BugLink: https://bugs.launchpad.net/bugs/1864775

commit 25a5edea upstream.

This fixes a Spectre-v1/L1TF vulnerability in fixed_msr_to_seg_unit().
This function contains index computations based on the
(attacker-controlled) MSR number.

Fixes: de9aef5e ("KVM: MTRR: introduce fixed_mtrr_segment table")
Signed-off-by: default avatarNick Finco <nifi@google.com>
Signed-off-by: default avatarMarios Pomonis <pomonis@google.com>
Reviewed-by: default avatarAndrew Honig <ahonig@google.com>
Cc: stable@vger.kernel.org
Reviewed-by: default avatarJim Mattson <jmattson@google.com>
Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: default avatarKhalid Elmously <khalid.elmously@canonical.com>
Signed-off-by: default avatarKleber Sacilotto de Souza <kleber.souza@canonical.com>
parent 01eed2cf
...@@ -17,6 +17,7 @@ ...@@ -17,6 +17,7 @@
*/ */
#include <linux/kvm_host.h> #include <linux/kvm_host.h>
#include <linux/nospec.h>
#include <asm/mtrr.h> #include <asm/mtrr.h>
#include "cpuid.h" #include "cpuid.h"
...@@ -202,11 +203,15 @@ static bool fixed_msr_to_seg_unit(u32 msr, int *seg, int *unit) ...@@ -202,11 +203,15 @@ static bool fixed_msr_to_seg_unit(u32 msr, int *seg, int *unit)
break; break;
case MSR_MTRRfix16K_80000 ... MSR_MTRRfix16K_A0000: case MSR_MTRRfix16K_80000 ... MSR_MTRRfix16K_A0000:
*seg = 1; *seg = 1;
*unit = msr - MSR_MTRRfix16K_80000; *unit = array_index_nospec(
msr - MSR_MTRRfix16K_80000,
MSR_MTRRfix16K_A0000 - MSR_MTRRfix16K_80000 + 1);
break; break;
case MSR_MTRRfix4K_C0000 ... MSR_MTRRfix4K_F8000: case MSR_MTRRfix4K_C0000 ... MSR_MTRRfix4K_F8000:
*seg = 2; *seg = 2;
*unit = msr - MSR_MTRRfix4K_C0000; *unit = array_index_nospec(
msr - MSR_MTRRfix4K_C0000,
MSR_MTRRfix4K_F8000 - MSR_MTRRfix4K_C0000 + 1);
break; break;
default: default:
return false; return false;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment