KVM: x86: Protect ioapic_write_indirect() from Spectre-v1/L1TF attacks
commit670564559c
upstream. This fixes a Spectre-v1/L1TF vulnerability in ioapic_write_indirect(). This function contains index computations based on the (attacker-controlled) IOREGSEL register. This patch depends on patch "KVM: x86: Protect ioapic_read_indirect() from Spectre-v1/L1TF attacks". Fixes:70f93dae32
("KVM: Use temporary variable to shorten lines.") 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> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
9bffdc7b11
commit
6367499bd6
@ -36,6 +36,7 @@
|
|||||||
#include <linux/io.h>
|
#include <linux/io.h>
|
||||||
#include <linux/slab.h>
|
#include <linux/slab.h>
|
||||||
#include <linux/export.h>
|
#include <linux/export.h>
|
||||||
|
#include <linux/nospec.h>
|
||||||
#include <asm/processor.h>
|
#include <asm/processor.h>
|
||||||
#include <asm/page.h>
|
#include <asm/page.h>
|
||||||
#include <asm/current.h>
|
#include <asm/current.h>
|
||||||
@ -299,6 +300,7 @@ static void ioapic_write_indirect(struct kvm_ioapic *ioapic, u32 val)
|
|||||||
ioapic_debug("change redir index %x val %x\n", index, val);
|
ioapic_debug("change redir index %x val %x\n", index, val);
|
||||||
if (index >= IOAPIC_NUM_PINS)
|
if (index >= IOAPIC_NUM_PINS)
|
||||||
return;
|
return;
|
||||||
|
index = array_index_nospec(index, IOAPIC_NUM_PINS);
|
||||||
e = &ioapic->redirtbl[index];
|
e = &ioapic->redirtbl[index];
|
||||||
mask_before = e->fields.mask;
|
mask_before = e->fields.mask;
|
||||||
/* Preserve read-only fields */
|
/* Preserve read-only fields */
|
||||||
|
Reference in New Issue
Block a user