kvm: nVMX: Validate the virtual-APIC address on nested VM-entry
According to the SDM, if the "use TPR shadow" VM-execution control is 1, bits 11:0 of the virtual-APIC address must be 0 and the address should set any bits beyond the processor's physical-address width. Signed-off-by: Jim Mattson <jmattson@google.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:

committed by
Paolo Bonzini

parent
bfcf83b144
commit
712b12d724
@@ -9993,6 +9993,18 @@ static int nested_vmx_check_msr_bitmap_controls(struct kvm_vcpu *vcpu,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int nested_vmx_check_tpr_shadow_controls(struct kvm_vcpu *vcpu,
|
||||||
|
struct vmcs12 *vmcs12)
|
||||||
|
{
|
||||||
|
if (!nested_cpu_has(vmcs12, CPU_BASED_TPR_SHADOW))
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
if (!page_address_valid(vcpu, vmcs12->virtual_apic_page_addr))
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Merge L0's and L1's MSR bitmap, return false to indicate that
|
* Merge L0's and L1's MSR bitmap, return false to indicate that
|
||||||
* we do not use the hardware.
|
* we do not use the hardware.
|
||||||
@@ -10680,6 +10692,9 @@ static int check_vmentry_prereqs(struct kvm_vcpu *vcpu, struct vmcs12 *vmcs12)
|
|||||||
if (nested_vmx_check_msr_bitmap_controls(vcpu, vmcs12))
|
if (nested_vmx_check_msr_bitmap_controls(vcpu, vmcs12))
|
||||||
return VMXERR_ENTRY_INVALID_CONTROL_FIELD;
|
return VMXERR_ENTRY_INVALID_CONTROL_FIELD;
|
||||||
|
|
||||||
|
if (nested_vmx_check_tpr_shadow_controls(vcpu, vmcs12))
|
||||||
|
return VMXERR_ENTRY_INVALID_CONTROL_FIELD;
|
||||||
|
|
||||||
if (nested_vmx_check_apicv_controls(vcpu, vmcs12))
|
if (nested_vmx_check_apicv_controls(vcpu, vmcs12))
|
||||||
return VMXERR_ENTRY_INVALID_CONTROL_FIELD;
|
return VMXERR_ENTRY_INVALID_CONTROL_FIELD;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user