Commit 2f1d48aa authored by Sean Christopherson's avatar Sean Christopherson Committed by Paolo Bonzini

KVM: nVMX: WARN if PML emulation helper is invoked outside of nested guest

WARN if vmx_write_pml_buffer() is called outside of guest mode instead
of silently ignoring the condition.  The only caller is nested EPT's
ept_update_accessed_dirty_bits(), which should only be reachable when
L2 is active.
Signed-off-by: default avatarSean Christopherson <sean.j.christopherson@intel.com>
Message-Id: <20200622215832.22090-4-sean.j.christopherson@intel.com>
Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
parent f25a9dec
...@@ -7485,32 +7485,33 @@ static int vmx_write_pml_buffer(struct kvm_vcpu *vcpu, gpa_t gpa) ...@@ -7485,32 +7485,33 @@ static int vmx_write_pml_buffer(struct kvm_vcpu *vcpu, gpa_t gpa)
struct vcpu_vmx *vmx = to_vmx(vcpu); struct vcpu_vmx *vmx = to_vmx(vcpu);
gpa_t dst; gpa_t dst;
if (is_guest_mode(vcpu)) { if (WARN_ON_ONCE(!is_guest_mode(vcpu)))
WARN_ON_ONCE(vmx->nested.pml_full); return 0;
/* if (WARN_ON_ONCE(vmx->nested.pml_full))
* Check if PML is enabled for the nested guest. return 1;
* Whether eptp bit 6 is set is already checked
* as part of A/D emulation.
*/
vmcs12 = get_vmcs12(vcpu);
if (!nested_cpu_has_pml(vmcs12))
return 0;
if (vmcs12->guest_pml_index >= PML_ENTITY_NUM) { /*
vmx->nested.pml_full = true; * Check if PML is enabled for the nested guest. Whether eptp bit 6 is
return 1; * set is already checked as part of A/D emulation.
} */
vmcs12 = get_vmcs12(vcpu);
if (!nested_cpu_has_pml(vmcs12))
return 0;
if (vmcs12->guest_pml_index >= PML_ENTITY_NUM) {
vmx->nested.pml_full = true;
return 1;
}
gpa &= ~0xFFFull; gpa &= ~0xFFFull;
dst = vmcs12->pml_address + sizeof(u64) * vmcs12->guest_pml_index; dst = vmcs12->pml_address + sizeof(u64) * vmcs12->guest_pml_index;
if (kvm_write_guest_page(vcpu->kvm, gpa_to_gfn(dst), &gpa, if (kvm_write_guest_page(vcpu->kvm, gpa_to_gfn(dst), &gpa,
offset_in_page(dst), sizeof(gpa))) offset_in_page(dst), sizeof(gpa)))
return 0; return 0;
vmcs12->guest_pml_index--; vmcs12->guest_pml_index--;
}
return 0; return 0;
} }
......
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