mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-25 13:43:55 +08:00
KVM: x86: Protect ioapic_read_indirect() from Spectre-v1/L1TF attacks
This fixes a Spectre-v1/L1TF vulnerability in ioapic_read_indirect().
This function contains index computations based on the
(attacker-controlled) IOREGSEL register.
Fixes: a2c118bfab
("KVM: Fix bounds checking in ioapic indirect register reads (CVE-2013-1798)")
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
14e32321f3
commit
8c86405f60
@ -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>
|
||||||
@ -68,13 +69,14 @@ static unsigned long ioapic_read_indirect(struct kvm_ioapic *ioapic,
|
|||||||
default:
|
default:
|
||||||
{
|
{
|
||||||
u32 redir_index = (ioapic->ioregsel - 0x10) >> 1;
|
u32 redir_index = (ioapic->ioregsel - 0x10) >> 1;
|
||||||
u64 redir_content;
|
u64 redir_content = ~0ULL;
|
||||||
|
|
||||||
if (redir_index < IOAPIC_NUM_PINS)
|
if (redir_index < IOAPIC_NUM_PINS) {
|
||||||
redir_content =
|
u32 index = array_index_nospec(
|
||||||
ioapic->redirtbl[redir_index].bits;
|
redir_index, IOAPIC_NUM_PINS);
|
||||||
else
|
|
||||||
redir_content = ~0ULL;
|
redir_content = ioapic->redirtbl[index].bits;
|
||||||
|
}
|
||||||
|
|
||||||
result = (ioapic->ioregsel & 0x1) ?
|
result = (ioapic->ioregsel & 0x1) ?
|
||||||
(redir_content >> 32) & 0xffffffff :
|
(redir_content >> 32) & 0xffffffff :
|
||||||
|
Loading…
Reference in New Issue
Block a user