OSDN Git Service

KVM: x86: never trap MSR_KERNEL_GS_BASE
authorPaolo Bonzini <pbonzini@redhat.com>
Mon, 24 Sep 2018 15:23:01 +0000 (17:23 +0200)
committerPaolo Bonzini <pbonzini@redhat.com>
Mon, 24 Sep 2018 16:34:13 +0000 (18:34 +0200)
commit4679b61f2640e07724507fcd9dc070517bc6e6cb
treea4d50f6a3e19a684d9d4c01fa0834e2e4aec92a9
parenta27fb6d983c7b5bb0129ae4d7a7c81758173bfab
KVM: x86: never trap MSR_KERNEL_GS_BASE

KVM has an old optimization whereby accesses to the kernel GS base MSR
are trapped when the guest is in 32-bit and not when it is in 64-bit mode.
The idea is that swapgs is not available in 32-bit mode, thus the
guest has no reason to access the MSR unless in 64-bit mode and
32-bit applications need not pay the price of switching the kernel GS
base between the host and the guest values.

However, this optimization adds complexity to the code for little
benefit (these days most guests are going to be 64-bit anyway) and in fact
broke after commit 678e315e78a7 ("KVM: vmx: add dedicated utility to
access guest's kernel_gs_base", 2018-08-06); the guest kernel GS base
can be corrupted across SMIs and UEFI Secure Boot is therefore broken
(a secure boot Linux guest, for example, fails to reach the login prompt
about half the time).  This patch just removes the optimization; the
kernel GS base MSR is now never trapped by KVM, similarly to the FS and
GS base MSRs.

Fixes: 678e315e78a780dbef384b92339c8414309dbc11
Reviewed-by: Sean Christopherson <sean.j.christopherson@intel.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
arch/x86/kvm/vmx.c