mirror of
https://github.com/adulau/aha.git
synced 2024-12-29 12:16:20 +00:00
KVM: VMX: Handle vmx instruction vmexits
IF a guest tries to use vmx instructions, inject a #UD to let it know the instruction is not implemented, rather than crashing. This prevents guest userspace from crashing the guest kernel. Cc: stable@kernel.org Signed-off-by: Avi Kivity <avi@redhat.com>
This commit is contained in:
parent
ef50f7ac7e
commit
e3c7cb6ad7
1 changed files with 15 additions and 0 deletions
|
@ -3012,6 +3012,12 @@ static int handle_vmcall(struct kvm_vcpu *vcpu, struct kvm_run *kvm_run)
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int handle_vmx_insn(struct kvm_vcpu *vcpu, struct kvm_run *kvm_run)
|
||||||
|
{
|
||||||
|
kvm_queue_exception(vcpu, UD_VECTOR);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
static int handle_invlpg(struct kvm_vcpu *vcpu, struct kvm_run *kvm_run)
|
static int handle_invlpg(struct kvm_vcpu *vcpu, struct kvm_run *kvm_run)
|
||||||
{
|
{
|
||||||
unsigned long exit_qualification = vmcs_readl(EXIT_QUALIFICATION);
|
unsigned long exit_qualification = vmcs_readl(EXIT_QUALIFICATION);
|
||||||
|
@ -3198,6 +3204,15 @@ static int (*kvm_vmx_exit_handlers[])(struct kvm_vcpu *vcpu,
|
||||||
[EXIT_REASON_HLT] = handle_halt,
|
[EXIT_REASON_HLT] = handle_halt,
|
||||||
[EXIT_REASON_INVLPG] = handle_invlpg,
|
[EXIT_REASON_INVLPG] = handle_invlpg,
|
||||||
[EXIT_REASON_VMCALL] = handle_vmcall,
|
[EXIT_REASON_VMCALL] = handle_vmcall,
|
||||||
|
[EXIT_REASON_VMCLEAR] = handle_vmx_insn,
|
||||||
|
[EXIT_REASON_VMLAUNCH] = handle_vmx_insn,
|
||||||
|
[EXIT_REASON_VMPTRLD] = handle_vmx_insn,
|
||||||
|
[EXIT_REASON_VMPTRST] = handle_vmx_insn,
|
||||||
|
[EXIT_REASON_VMREAD] = handle_vmx_insn,
|
||||||
|
[EXIT_REASON_VMRESUME] = handle_vmx_insn,
|
||||||
|
[EXIT_REASON_VMWRITE] = handle_vmx_insn,
|
||||||
|
[EXIT_REASON_VMOFF] = handle_vmx_insn,
|
||||||
|
[EXIT_REASON_VMON] = handle_vmx_insn,
|
||||||
[EXIT_REASON_TPR_BELOW_THRESHOLD] = handle_tpr_below_threshold,
|
[EXIT_REASON_TPR_BELOW_THRESHOLD] = handle_tpr_below_threshold,
|
||||||
[EXIT_REASON_APIC_ACCESS] = handle_apic_access,
|
[EXIT_REASON_APIC_ACCESS] = handle_apic_access,
|
||||||
[EXIT_REASON_WBINVD] = handle_wbinvd,
|
[EXIT_REASON_WBINVD] = handle_wbinvd,
|
||||||
|
|
Loading…
Reference in a new issue