Commit 609f820f authored by Nicolai Stange's avatar Nicolai Stange Committed by Stefan Bader

x86/irq: Let interrupt handlers set kvm_cpu_l1tf_flush_l1d

The last missing piece to having vmx_l1d_flush() take interrupts after
VMEXIT into account is to set the kvm_cpu_l1tf_flush_l1d per-cpu flag on
irq entry.

Issue calls to kvm_set_cpu_l1tf_flush_l1d() from entering_irq(),
ipi_entering_ack_irq(), smp_reschedule_interrupt() and
uv_bau_message_interrupt().
Suggested-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
Signed-off-by: default avatarNicolai Stange <nstange@suse.de>
Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>

CVE-2018-3620
CVE-2018-3646

[smb: Minor context adjustments]
Signed-off-by: default avatarStefan Bader <stefan.bader@canonical.com>
parent a56fcf6a
...@@ -11,6 +11,7 @@ ...@@ -11,6 +11,7 @@
#include <asm/fixmap.h> #include <asm/fixmap.h>
#include <asm/mpspec.h> #include <asm/mpspec.h>
#include <asm/msr.h> #include <asm/msr.h>
#include <asm/hardirq.h>
#include <asm/idle.h> #include <asm/idle.h>
#define ARCH_APICTIMER_STOPS_ON_C3 1 #define ARCH_APICTIMER_STOPS_ON_C3 1
...@@ -639,6 +640,7 @@ extern void irq_exit(void); ...@@ -639,6 +640,7 @@ extern void irq_exit(void);
static inline void entering_irq(void) static inline void entering_irq(void)
{ {
irq_enter(); irq_enter();
kvm_set_cpu_l1tf_flush_l1d();
exit_idle(); exit_idle();
} }
...@@ -652,6 +654,7 @@ static inline void ipi_entering_ack_irq(void) ...@@ -652,6 +654,7 @@ static inline void ipi_entering_ack_irq(void)
{ {
irq_enter(); irq_enter();
ack_APIC_irq(); ack_APIC_irq();
kvm_set_cpu_l1tf_flush_l1d();
} }
static inline void exiting_irq(void) static inline void exiting_irq(void)
......
...@@ -261,6 +261,7 @@ __visible void smp_reschedule_interrupt(struct pt_regs *regs) ...@@ -261,6 +261,7 @@ __visible void smp_reschedule_interrupt(struct pt_regs *regs)
{ {
ack_APIC_irq(); ack_APIC_irq();
__smp_reschedule_interrupt(); __smp_reschedule_interrupt();
kvm_set_cpu_l1tf_flush_l1d();
/* /*
* KVM uses this interrupt to force a cpu out of guest mode * KVM uses this interrupt to force a cpu out of guest mode
*/ */
......
...@@ -1249,6 +1249,7 @@ void uv_bau_message_interrupt(struct pt_regs *regs) ...@@ -1249,6 +1249,7 @@ void uv_bau_message_interrupt(struct pt_regs *regs)
struct msg_desc msgdesc; struct msg_desc msgdesc;
ack_APIC_irq(); ack_APIC_irq();
kvm_set_cpu_l1tf_flush_l1d();
time_start = get_cycles(); time_start = get_cycles();
bcp = &per_cpu(bau_control, smp_processor_id()); bcp = &per_cpu(bau_control, smp_processor_id());
......
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