Commit 53963a70 authored by Lan Tianyu's avatar Lan Tianyu Committed by Paolo Bonzini

KVM/VMX: Check ept_pointer before flushing ept tlb

This patch is to initialize ept_pointer to INVALID_PAGE and check it
before flushing ept tlb. If ept_pointer is invalid, bypass the flush
request.
Signed-off-by: default avatarLan Tianyu <Tianyu.Lan@microsoft.com>
Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
parent a0d4f803
......@@ -423,11 +423,18 @@ static int vmx_hv_remote_flush_tlb(struct kvm *kvm)
/*
* FLUSH_GUEST_PHYSICAL_ADDRESS_SPACE hypercall needs the address of the
* base of EPT PML4 table, strip off EPT configuration information.
* If ept_pointer is invalid pointer, bypass the flush request.
*/
if (to_kvm_vmx(kvm)->ept_pointers_match != EPT_POINTERS_MATCH) {
kvm_for_each_vcpu(i, vcpu, kvm)
kvm_for_each_vcpu(i, vcpu, kvm) {
u64 ept_pointer = to_vmx(vcpu)->ept_pointer;
if (!VALID_PAGE(ept_pointer))
continue;
ret |= hyperv_flush_guest_mapping(
to_vmx(kvm_get_vcpu(kvm, i))->ept_pointer & PAGE_MASK);
ept_pointer & PAGE_MASK);
}
} else {
ret = hyperv_flush_guest_mapping(
to_vmx(kvm_get_vcpu(kvm, 0))->ept_pointer & PAGE_MASK);
......@@ -6433,6 +6440,8 @@ static struct kvm_vcpu *vmx_create_vcpu(struct kvm *kvm, unsigned int id)
vmx->pi_desc.nv = POSTED_INTR_VECTOR;
vmx->pi_desc.sn = 1;
vmx->ept_pointer = INVALID_PAGE;
return &vmx->vcpu;
free_vmcs:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment