linux/arch
Wanpeng Li a073d7e3ad KVM: hyperv: Fix Direct Synthetic timers assert an interrupt w/o lapic_in_kernel
Reported by syzkaller:

	kasan: GPF could be caused by NULL-ptr deref or user memory access
	general protection fault: 0000 [#1] PREEMPT SMP KASAN
	RIP: 0010:__apic_accept_irq+0x46/0x740 arch/x86/kvm/lapic.c:1029
	Call Trace:
	kvm_apic_set_irq+0xb4/0x140 arch/x86/kvm/lapic.c:558
	stimer_notify_direct arch/x86/kvm/hyperv.c:648 [inline]
	stimer_expiration arch/x86/kvm/hyperv.c:659 [inline]
	kvm_hv_process_stimers+0x594/0x1650 arch/x86/kvm/hyperv.c:686
	vcpu_enter_guest+0x2b2a/0x54b0 arch/x86/kvm/x86.c:7896
	vcpu_run+0x393/0xd40 arch/x86/kvm/x86.c:8152
	kvm_arch_vcpu_ioctl_run+0x636/0x900 arch/x86/kvm/x86.c:8360
	kvm_vcpu_ioctl+0x6cf/0xaf0 arch/x86/kvm/../../../virt/kvm/kvm_main.c:2765

The testcase programs HV_X64_MSR_STIMERn_CONFIG/HV_X64_MSR_STIMERn_COUNT,
in addition, there is no lapic in the kernel, the counters value are small
enough in order that kvm_hv_process_stimers() inject this already-expired
timer interrupt into the guest through lapic in the kernel which triggers
the NULL deferencing. This patch fixes it by don't advertise direct mode
synthetic timers and discarding the inject when lapic is not in kernel.

syzkaller source: https://syzkaller.appspot.com/x/repro.c?x=1752fe0a600000

Reported-by: syzbot+dff25ee91f0c7d5c1695@syzkaller.appspotmail.com
Cc: Paolo Bonzini <pbonzini@redhat.com>
Cc: Radim Krčmář <rkrcmar@redhat.com>
Signed-off-by: Wanpeng Li <wanpengli@tencent.com>
Reviewed-by: Vitaly Kuznetsov <vkuznets@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
2019-09-24 13:37:27 +02:00
..
alpha Kbuild updates for v5.4 2019-09-20 08:36:47 -07:00
arc Kbuild updates for v5.4 2019-09-20 08:36:47 -07:00
arm pci-v5.4-changes 2019-09-23 19:16:01 -07:00
arm64 pci-v5.4-changes 2019-09-23 19:16:01 -07:00
c6x dma-mapping: remove CONFIG_ARCH_NO_COHERENT_DMA_MMAP 2019-09-04 11:13:18 +02:00
csky hmm related patches for 5.4 2019-09-21 10:07:42 -07:00
h8300 h8300 update for 5.3 2019-07-17 09:36:38 -07:00
hexagon hexagon: switch to generic version of pte allocation 2019-07-21 09:53:00 -07:00
ia64 Kbuild updates for v5.4 2019-09-20 08:36:47 -07:00
m68k Modules updates for v5.4 2019-09-22 10:34:46 -07:00
microblaze pci-v5.4-changes 2019-09-23 19:16:01 -07:00
mips pci-v5.4-changes 2019-09-23 19:16:01 -07:00
nds32 dma-mapping updates for 5.4: 2019-09-19 13:27:23 -07:00
nios2 nios2 update for v5.3-rc1 2019-07-12 15:38:05 -07:00
openrisc hmm related patches for 5.4 2019-09-21 10:07:42 -07:00
parisc Kbuild updates for v5.4 2019-09-20 08:36:47 -07:00
powerpc pci-v5.4-changes 2019-09-23 19:16:01 -07:00
riscv Kbuild updates for v5.4 2019-09-20 08:36:47 -07:00
s390 hmm related patches for 5.4 2019-09-21 10:07:42 -07:00
sh dma-mapping updates for 5.4: 2019-09-19 13:27:23 -07:00
sparc pci-v5.4-changes 2019-09-23 19:16:01 -07:00
um This pull request contains the following changes for UML: 2019-09-21 11:07:02 -07:00
unicore32 dma-mapping updates for 5.4: 2019-09-19 13:27:23 -07:00
x86 KVM: hyperv: Fix Direct Synthetic timers assert an interrupt w/o lapic_in_kernel 2019-09-24 13:37:27 +02:00
xtensa dma-mapping updates for 5.4: 2019-09-19 13:27:23 -07:00
.gitignore
Kconfig powerpc updates for 5.4 2019-09-20 11:48:06 -07:00