mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-30 19:06:14 +00:00
KVM: x86: Protect MSR-based index computations from Spectre-v1/L1TF attacks in x86.c
This fixes a Spectre-v1/L1TF vulnerability in set_msr_mce() and
get_msr_mce().
Both functions contain index computations based on the
(attacker-controlled) MSR number.
Fixes: 890ca9aefa
("KVM: Add MCE support")
Signed-off-by: Nick Finco <nifi@google.com>
Signed-off-by: Marios Pomonis <pomonis@google.com>
Reviewed-by: Andrew Honig <ahonig@google.com>
Cc: stable@vger.kernel.org
Reviewed-by: Jim Mattson <jmattson@google.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
13c5183a4e
commit
6ec4c5eee1
1 changed files with 8 additions and 2 deletions
|
@ -2545,7 +2545,10 @@ static int set_msr_mce(struct kvm_vcpu *vcpu, struct msr_data *msr_info)
|
||||||
default:
|
default:
|
||||||
if (msr >= MSR_IA32_MC0_CTL &&
|
if (msr >= MSR_IA32_MC0_CTL &&
|
||||||
msr < MSR_IA32_MCx_CTL(bank_num)) {
|
msr < MSR_IA32_MCx_CTL(bank_num)) {
|
||||||
u32 offset = msr - MSR_IA32_MC0_CTL;
|
u32 offset = array_index_nospec(
|
||||||
|
msr - MSR_IA32_MC0_CTL,
|
||||||
|
MSR_IA32_MCx_CTL(bank_num) - MSR_IA32_MC0_CTL);
|
||||||
|
|
||||||
/* only 0 or all 1s can be written to IA32_MCi_CTL
|
/* only 0 or all 1s can be written to IA32_MCi_CTL
|
||||||
* some Linux kernels though clear bit 10 in bank 4 to
|
* some Linux kernels though clear bit 10 in bank 4 to
|
||||||
* workaround a BIOS/GART TBL issue on AMD K8s, ignore
|
* workaround a BIOS/GART TBL issue on AMD K8s, ignore
|
||||||
|
@ -2986,7 +2989,10 @@ static int get_msr_mce(struct kvm_vcpu *vcpu, u32 msr, u64 *pdata, bool host)
|
||||||
default:
|
default:
|
||||||
if (msr >= MSR_IA32_MC0_CTL &&
|
if (msr >= MSR_IA32_MC0_CTL &&
|
||||||
msr < MSR_IA32_MCx_CTL(bank_num)) {
|
msr < MSR_IA32_MCx_CTL(bank_num)) {
|
||||||
u32 offset = msr - MSR_IA32_MC0_CTL;
|
u32 offset = array_index_nospec(
|
||||||
|
msr - MSR_IA32_MC0_CTL,
|
||||||
|
MSR_IA32_MCx_CTL(bank_num) - MSR_IA32_MC0_CTL);
|
||||||
|
|
||||||
data = vcpu->arch.mce_banks[offset];
|
data = vcpu->arch.mce_banks[offset];
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue