kvm: nVMX: Validate CR3 target count on nested VM-entry
According to the SDM, the CR3-target count must not be greater than 4. Future processors may support a different number of CR3-target values. Software should read the VMX capability MSR IA32_VMX_MISC to determine the number of values supported. Signed-off-by: Jim Mattson <jmattson@google.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
4415b33528
commit
c7c2c709b6
|
@ -1314,6 +1314,11 @@ static inline bool report_flexpriority(void)
|
||||||
return flexpriority_enabled;
|
return flexpriority_enabled;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline unsigned nested_cpu_vmx_misc_cr3_count(struct kvm_vcpu *vcpu)
|
||||||
|
{
|
||||||
|
return vmx_misc_cr3_count(to_vmx(vcpu)->nested.nested_vmx_misc_low);
|
||||||
|
}
|
||||||
|
|
||||||
static inline bool nested_cpu_has(struct vmcs12 *vmcs12, u32 bit)
|
static inline bool nested_cpu_has(struct vmcs12 *vmcs12, u32 bit)
|
||||||
{
|
{
|
||||||
return vmcs12->cpu_based_vm_exec_control & bit;
|
return vmcs12->cpu_based_vm_exec_control & bit;
|
||||||
|
@ -10266,6 +10271,9 @@ static int check_vmentry_prereqs(struct kvm_vcpu *vcpu, struct vmcs12 *vmcs12)
|
||||||
vmx->nested.nested_vmx_entry_ctls_high))
|
vmx->nested.nested_vmx_entry_ctls_high))
|
||||||
return VMXERR_ENTRY_INVALID_CONTROL_FIELD;
|
return VMXERR_ENTRY_INVALID_CONTROL_FIELD;
|
||||||
|
|
||||||
|
if (vmcs12->cr3_target_count > nested_cpu_vmx_misc_cr3_count(vcpu))
|
||||||
|
return VMXERR_ENTRY_INVALID_CONTROL_FIELD;
|
||||||
|
|
||||||
if (!nested_host_cr0_valid(vcpu, vmcs12->host_cr0) ||
|
if (!nested_host_cr0_valid(vcpu, vmcs12->host_cr0) ||
|
||||||
!nested_host_cr4_valid(vcpu, vmcs12->host_cr4) ||
|
!nested_host_cr4_valid(vcpu, vmcs12->host_cr4) ||
|
||||||
!nested_cr3_valid(vcpu, vmcs12->host_cr3))
|
!nested_cr3_valid(vcpu, vmcs12->host_cr3))
|
||||||
|
|
Loading…
Reference in a new issue