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,13 +7485,15 @@ static int vmx_write_pml_buffer(struct kvm_vcpu *vcpu, gpa_t gpa) ...@@ -7485,13 +7485,15 @@ 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))
return 1;
/* /*
* Check if PML is enabled for the nested guest. * Check if PML is enabled for the nested guest. Whether eptp bit 6 is
* Whether eptp bit 6 is set is already checked * set is already checked as part of A/D emulation.
* as part of A/D emulation.
*/ */
vmcs12 = get_vmcs12(vcpu); vmcs12 = get_vmcs12(vcpu);
if (!nested_cpu_has_pml(vmcs12)) if (!nested_cpu_has_pml(vmcs12))
...@@ -7510,7 +7512,6 @@ static int vmx_write_pml_buffer(struct kvm_vcpu *vcpu, gpa_t gpa) ...@@ -7510,7 +7512,6 @@ static int vmx_write_pml_buffer(struct kvm_vcpu *vcpu, gpa_t 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