]> git.baikalelectronics.ru Git - kernel.git/commit
KVM: x86: Allow userspace to opt out of hypercall patching
authorOliver Upton <oupton@google.com>
Wed, 16 Mar 2022 00:55:37 +0000 (00:55 +0000)
committerPaolo Bonzini <pbonzini@redhat.com>
Sat, 2 Apr 2022 09:41:10 +0000 (05:41 -0400)
commitb794c55a6c1ffe1242d582afae48985413c456b4
tree423a1f817617a7cc72d059ab2a83639469a7034f
parent4e75a61d2e663d2f98cbd6a89c4d7c00b1313bcd
KVM: x86: Allow userspace to opt out of hypercall patching

KVM handles the VMCALL/VMMCALL instructions very strangely. Even though
both of these instructions really should #UD when executed on the wrong
vendor's hardware (i.e. VMCALL on SVM, VMMCALL on VMX), KVM replaces the
guest's instruction with the appropriate instruction for the vendor.
Nonetheless, older guest kernels without commit 7f9e1d9e973e ("x86: kvm:
use alternatives for VMCALL vs. VMMCALL if kernel text is read-only")
do not patch in the appropriate instruction using alternatives, likely
motivating KVM's intervention.

Add a quirk allowing userspace to opt out of hypercall patching. If the
quirk is disabled, KVM synthesizes a #UD in the guest.

Signed-off-by: Oliver Upton <oupton@google.com>
Message-Id: <20220316005538.2282772-2-oupton@google.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Documentation/virt/kvm/api.rst
arch/x86/include/asm/kvm_host.h
arch/x86/include/uapi/asm/kvm.h
arch/x86/kvm/x86.c