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) ...@@ -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 * FLUSH_GUEST_PHYSICAL_ADDRESS_SPACE hypercall needs the address of the
* base of EPT PML4 table, strip off EPT configuration information. * 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) { 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( ret |= hyperv_flush_guest_mapping(
to_vmx(kvm_get_vcpu(kvm, i))->ept_pointer & PAGE_MASK); ept_pointer & PAGE_MASK);
}
} else { } else {
ret = hyperv_flush_guest_mapping( ret = hyperv_flush_guest_mapping(
to_vmx(kvm_get_vcpu(kvm, 0))->ept_pointer & PAGE_MASK); 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) ...@@ -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.nv = POSTED_INTR_VECTOR;
vmx->pi_desc.sn = 1; vmx->pi_desc.sn = 1;
vmx->ept_pointer = INVALID_PAGE;
return &vmx->vcpu; return &vmx->vcpu;
free_vmcs: 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