linux-next/arch/x86
Lai Jiangshan a217a6593c KVM/VMX: Invoke NMI non-IST entry instead of IST entry
In VMX, the host NMI handler needs to be invoked after NMI VM-Exit.
Before commit 1a5488ef0d ("KVM: VMX: Invoke NMI handler via indirect
call instead of INTn"), this was done by INTn ("int $2"). But INTn
microcode is relatively expensive, so the commit reworked NMI VM-Exit
handling to invoke the kernel handler by function call.

But this missed a detail. The NMI entry point for direct invocation is
fetched from the IDT table and called on the kernel stack.  But on 64-bit
the NMI entry installed in the IDT expects to be invoked on the IST stack.
It relies on the "NMI executing" variable on the IST stack to work
correctly, which is at a fixed position in the IST stack.  When the entry
point is unexpectedly called on the kernel stack, the RSP-addressed "NMI
executing" variable is obviously also on the kernel stack and is
"uninitialized" and can cause the NMI entry code to run in the wrong way.

Provide a non-ist entry point for VMX which shares the C-function with
the regular NMI entry and invoke the new asm entry point instead.

On 32-bit this just maps to the regular NMI entry point as 32-bit has no
ISTs and is not affected.

[ tglx: Made it independent for backporting, massaged changelog ]

Fixes: 1a5488ef0d ("KVM: VMX: Invoke NMI handler via indirect call instead of INTn")
Signed-off-by: Lai Jiangshan <laijs@linux.alibaba.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Tested-by: Lai Jiangshan <laijs@linux.alibaba.com>
Cc: stable@vger.kernel.org
Link: https://lore.kernel.org/r/87r1imi8i1.ffs@nanos.tec.linutronix.de
2021-05-05 22:54:10 +02:00
..
boot - turn the stack canary into a normal __percpu variable on 32-bit which 2021-04-27 17:45:09 -07:00
configs module: remove EXPORT_UNUSED_SYMBOL* 2021-02-08 12:28:07 +01:00
crypto Objtool updates in this cycle were: 2021-04-28 12:53:24 -07:00
entry Add Landlock, a new LSM from Mickaël Salaün <mic@linux.microsoft.com> 2021-05-01 18:50:44 -07:00
events IOMMU Updates for Linux v5.13 2021-05-01 09:33:00 -07:00
hyperv The x86 MM changes in this cycle were: 2021-04-29 11:41:43 -07:00
ia32 x86/ia32_signal: Propagate __user annotation properly 2020-12-11 19:44:31 +01:00
include KVM/VMX: Invoke NMI non-IST entry instead of IST entry 2021-05-05 22:54:10 +02:00
kernel KVM/VMX: Invoke NMI non-IST entry instead of IST entry 2021-05-05 22:54:10 +02:00
kvm KVM/VMX: Invoke NMI non-IST entry instead of IST entry 2021-05-05 22:54:10 +02:00
lib - turn the stack canary into a normal __percpu variable on 32-bit which 2021-04-27 17:45:09 -07:00
math-emu x86/fpu/math-emu: Fix function cast warning 2021-03-23 00:08:02 +01:00
mm ARM: 2021-05-01 10:14:08 -07:00
net Networking changes for 5.13. 2021-04-29 11:57:23 -07:00
pci x86: Fix various typos in comments 2021-03-18 15:31:53 +01:00
platform - turn the stack canary into a normal __percpu variable on 32-bit which 2021-04-27 17:45:09 -07:00
power - turn the stack canary into a normal __percpu variable on 32-bit which 2021-04-27 17:45:09 -07:00
purgatory crypto: sha - split sha.h into sha1.h and sha2.h 2020-11-20 14:45:33 +11:00
ras
realmode x86: Fix various typos in comments, take #2 2021-03-21 23:50:28 +01:00
tools x86/tools/insn_sanity: Convert to insn_decode() 2021-03-15 12:21:11 +01:00
um um: remove process stub VMA 2021-02-12 21:37:38 +01:00
video
xen The x86 MM changes in this cycle were: 2021-04-29 11:41:43 -07:00
.gitignore
Kbuild
Kconfig mm/memtest: add ARCH_USE_MEMTEST 2021-04-30 11:20:36 -07:00
Kconfig.assembler
Kconfig.cpu
Kconfig.debug x86, libnvdimm/test: Remove COPY_MC_TEST 2020-10-26 18:08:35 +01:00
Makefile Kbuild updates for v5.13 2021-04-29 14:24:39 -07:00
Makefile_32.cpu
Makefile.um