linux/arch
Lai Jiangshan b53e84eed0 KVM: x86: Unload MMU on guest TLB flush if TDP disabled to force MMU sync
When using shadow paging, unload the guest MMU when emulating a guest TLB
flush to ensure all roots are synchronized.  From the guest's perspective,
flushing the TLB ensures any and all modifications to its PTEs will be
recognized by the CPU.

Note, unloading the MMU is overkill, but is done to mirror KVM's existing
handling of INVPCID(all) and ensure the bug is squashed.  Future cleanup
can be done to more precisely synchronize roots when servicing a guest
TLB flush.

If TDP is enabled, synchronizing the MMU is unnecessary even if nested
TDP is in play, as a "legacy" TLB flush from L1 does not invalidate L1's
TDP mappings.  For EPT, an explicit INVEPT is required to invalidate
guest-physical mappings; for NPT, guest mappings are always tagged with
an ASID and thus can only be invalidated via the VMCB's ASID control.

This bug has existed since the introduction of KVM_VCPU_FLUSH_TLB.
It was only recently exposed after Linux guests stopped flushing the
local CPU's TLB prior to flushing remote TLBs (see commit 4ce94eabac,
"x86/mm/tlb: Flush remote and local TLBs concurrently"), but is also
visible in Windows 10 guests.

Tested-by: Maxim Levitsky <mlevitsk@redhat.com>
Reviewed-by: Maxim Levitsky <mlevitsk@redhat.com>
Fixes: f38a7b7526 ("KVM: X86: support paravirtualized help for TLB shootdowns")
Signed-off-by: Lai Jiangshan <laijs@linux.alibaba.com>
[sean: massaged comment and changelog]
Message-Id: <20210531172256.2908-1-jiangshanlai@gmail.com>
Signed-off-by: Sean Christopherson <seanjc@google.com>
Cc: stable@vger.kernel.org
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
2021-06-08 17:10:21 -04:00
..
alpha Merge branch 'akpm' (patches from Andrew) 2021-05-07 00:34:51 -07:00
arc mm: drop redundant HAVE_ARCH_TRANSPARENT_HUGEPAGE 2021-05-05 11:27:25 -07:00
arm Kbuild updates for v5.13 (2nd) 2021-05-08 10:00:11 -07:00
arm64 KVM: arm64: Prevent mixed-width VM creation 2021-05-27 10:34:33 +01:00
csky arch/csky patches for 5.13-rc1 2021-05-03 12:58:31 -07:00
h8300 arch: rearrange headers inclusion order in asm/bitops for m68k, sh and h8300 2021-05-06 19:24:11 -07:00
hexagon Merge branch 'akpm' (patches from Andrew) 2021-05-07 00:34:51 -07:00
ia64 Merge branch 'akpm' (patches from Andrew) 2021-05-07 00:34:51 -07:00
m68k Kbuild updates for v5.13 (2nd) 2021-05-08 10:00:11 -07:00
microblaze tracing updates for 5.13 2021-05-03 11:19:54 -07:00
mips Kbuild updates for v5.13 (2nd) 2021-05-08 10:00:11 -07:00
nds32 tracing updates for 5.13 2021-05-03 11:19:54 -07:00
nios2 Merge branch 'work.misc' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs 2021-05-02 09:14:01 -07:00
openrisc drivers/char: remove /dev/kmem for good 2021-05-07 00:26:34 -07:00
parisc Kbuild updates for v5.13 (2nd) 2021-05-08 10:00:11 -07:00
powerpc KVM: rename KVM_REQ_PENDING_TIMER to KVM_REQ_UNBLOCK 2021-05-27 07:57:38 -04:00
riscv riscv: remove unused handle_exception symbol 2021-05-06 09:40:16 -07:00
s390 Merge branch 'akpm' (patches from Andrew) 2021-05-07 00:34:51 -07:00
sh Kbuild updates for v5.13 (2nd) 2021-05-08 10:00:11 -07:00
sparc Kbuild updates for v5.13 (2nd) 2021-05-08 10:00:11 -07:00
um Merge branch 'akpm' (patches from Andrew) 2021-05-07 00:34:51 -07:00
x86 KVM: x86: Unload MMU on guest TLB flush if TDP disabled to force MMU sync 2021-06-08 17:10:21 -04:00
xtensa Kbuild updates for v5.13 (2nd) 2021-05-08 10:00:11 -07:00
.gitignore .gitignore: prefix local generated files with a slash 2021-05-02 00:43:35 +09:00
Kconfig Add Landlock, a new LSM from Mickaël Salaün <mic@linux.microsoft.com> 2021-05-01 18:50:44 -07:00