|
@@ -729,6 +729,7 @@ static unsigned long nested_ept_get_cr3(struct kvm_vcpu *vcpu);
|
|
|
static u64 construct_eptp(unsigned long root_hpa);
|
|
|
static void kvm_cpu_vmxon(u64 addr);
|
|
|
static void kvm_cpu_vmxoff(void);
|
|
|
+static bool vmx_mpx_supported(void);
|
|
|
static int vmx_set_tss_addr(struct kvm *kvm, unsigned int addr);
|
|
|
static void vmx_set_segment(struct kvm_vcpu *vcpu,
|
|
|
struct kvm_segment *var, int seg);
|
|
@@ -2501,6 +2502,8 @@ static int vmx_get_msr(struct kvm_vcpu *vcpu, u32 msr_index, u64 *pdata)
|
|
|
data = vmcs_readl(GUEST_SYSENTER_ESP);
|
|
|
break;
|
|
|
case MSR_IA32_BNDCFGS:
|
|
|
+ if (!vmx_mpx_supported())
|
|
|
+ return 1;
|
|
|
data = vmcs_read64(GUEST_BNDCFGS);
|
|
|
break;
|
|
|
case MSR_IA32_FEATURE_CONTROL:
|
|
@@ -2572,6 +2575,8 @@ static int vmx_set_msr(struct kvm_vcpu *vcpu, struct msr_data *msr_info)
|
|
|
vmcs_writel(GUEST_SYSENTER_ESP, data);
|
|
|
break;
|
|
|
case MSR_IA32_BNDCFGS:
|
|
|
+ if (!vmx_mpx_supported())
|
|
|
+ return 1;
|
|
|
vmcs_write64(GUEST_BNDCFGS, data);
|
|
|
break;
|
|
|
case MSR_IA32_TSC:
|