|
Juergen Gross |
ffbe4d |
Patch-mainline: v5.6-rc1
|
|
Juergen Gross |
ffbe4d |
Git-commit: 25a5edea71b7c154b6a0b8cec14c711cafa31d26
|
|
Juergen Gross |
ffbe4d |
From: Marios Pomonis <pomonis@google.com>
|
|
Juergen Gross |
ffbe4d |
Date: Wed, 11 Dec 2019 12:47:47 -0800
|
|
Juergen Gross |
ffbe4d |
Subject: [PATCH] KVM: x86: Protect MSR-based index computations in
|
|
Juergen Gross |
ffbe4d |
fixed_msr_to_seg_unit() from Spectre-v1/L1TF attacks
|
|
Juergen Gross |
ffbe4d |
References: bsc#1164731
|
|
Juergen Gross |
ffbe4d |
|
|
Juergen Gross |
ffbe4d |
This fixes a Spectre-v1/L1TF vulnerability in fixed_msr_to_seg_unit().
|
|
Juergen Gross |
ffbe4d |
This function contains index computations based on the
|
|
Juergen Gross |
ffbe4d |
(attacker-controlled) MSR number.
|
|
Juergen Gross |
ffbe4d |
|
|
Juergen Gross |
ffbe4d |
Fixes: de9aef5e1ad6 ("KVM: MTRR: introduce fixed_mtrr_segment table")
|
|
Juergen Gross |
ffbe4d |
|
|
Juergen Gross |
ffbe4d |
Signed-off-by: Nick Finco <nifi@google.com>
|
|
Juergen Gross |
ffbe4d |
Signed-off-by: Marios Pomonis <pomonis@google.com>
|
|
Juergen Gross |
ffbe4d |
Reviewed-by: Andrew Honig <ahonig@google.com>
|
|
Juergen Gross |
ffbe4d |
Cc: stable@vger.kernel.org
|
|
Juergen Gross |
ffbe4d |
Reviewed-by: Jim Mattson <jmattson@google.com>
|
|
Juergen Gross |
ffbe4d |
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
|
|
Juergen Gross |
ffbe4d |
Signed-off-by: Juergen Gross <jgross@suse.com>
|
|
Juergen Gross |
ffbe4d |
---
|
|
Juergen Gross |
ffbe4d |
arch/x86/kvm/mtrr.c | 8 ++++++--
|
|
Juergen Gross |
ffbe4d |
1 file changed, 6 insertions(+), 2 deletions(-)
|
|
Juergen Gross |
ffbe4d |
|
|
Juergen Gross |
ffbe4d |
diff --git a/arch/x86/kvm/mtrr.c b/arch/x86/kvm/mtrr.c
|
|
Juergen Gross |
ffbe4d |
index 25ce3edd1872..7f0059aa30e1 100644
|
|
Juergen Gross |
ffbe4d |
--- a/arch/x86/kvm/mtrr.c
|
|
Juergen Gross |
ffbe4d |
+++ b/arch/x86/kvm/mtrr.c
|
|
Juergen Gross |
ffbe4d |
@@ -202,11 +202,15 @@ static bool fixed_msr_to_seg_unit(u32 msr, int *seg, int *unit)
|
|
Juergen Gross |
ffbe4d |
break;
|
|
Juergen Gross |
ffbe4d |
case MSR_MTRRfix16K_80000 ... MSR_MTRRfix16K_A0000:
|
|
Juergen Gross |
ffbe4d |
*seg = 1;
|
|
Juergen Gross |
ffbe4d |
- *unit = msr - MSR_MTRRfix16K_80000;
|
|
Juergen Gross |
ffbe4d |
+ *unit = array_index_nospec(
|
|
Juergen Gross |
ffbe4d |
+ msr - MSR_MTRRfix16K_80000,
|
|
Juergen Gross |
ffbe4d |
+ MSR_MTRRfix16K_A0000 - MSR_MTRRfix16K_80000 + 1);
|
|
Juergen Gross |
ffbe4d |
break;
|
|
Juergen Gross |
ffbe4d |
case MSR_MTRRfix4K_C0000 ... MSR_MTRRfix4K_F8000:
|
|
Juergen Gross |
ffbe4d |
*seg = 2;
|
|
Juergen Gross |
ffbe4d |
- *unit = msr - MSR_MTRRfix4K_C0000;
|
|
Juergen Gross |
ffbe4d |
+ *unit = array_index_nospec(
|
|
Juergen Gross |
ffbe4d |
+ msr - MSR_MTRRfix4K_C0000,
|
|
Juergen Gross |
ffbe4d |
+ MSR_MTRRfix4K_F8000 - MSR_MTRRfix4K_C0000 + 1);
|
|
Juergen Gross |
ffbe4d |
break;
|
|
Juergen Gross |
ffbe4d |
default:
|
|
Juergen Gross |
ffbe4d |
return false;
|
|
Juergen Gross |
ffbe4d |
--
|
|
Juergen Gross |
ffbe4d |
2.16.4
|
|
Juergen Gross |
ffbe4d |
|