2017-11-03 14:31 GMT+08:00 Krish Sadhukhan <krish.sadhukhan@xxxxxxxxxx>: > > > On 11/02/2017 05:50 PM, Wanpeng Li wrote: >> >> From: Wanpeng Li <wanpeng.li@xxxxxxxxxxx> >> >> According to the SDM, if the "load IA32_BNDCFGS" VM-entry controls is 1, >> the >> following checks are performed on the field for the IA32_BNDCFGS MSR: >> - Bits reserved in the IA32_BNDCFGS MSR must be 0. >> - The linear address in bits 63:12 must be canonical. >> >> Reviewed-by: Konrad Rzeszutek Wilk <konrad.wilk@xxxxxxxxxx> >> Cc: Paolo Bonzini <pbonzini@xxxxxxxxxx> >> Cc: Radim Krčmář <rkrcmar@xxxxxxxxxx> >> Cc: Jim Mattson <jmattson@xxxxxxxxxx> >> Signed-off-by: Wanpeng Li <wanpeng.li@xxxxxxxxxxx> >> --- >> v3 -> v4: >> * simply condition >> * use && instead of nested "if"s >> >> arch/x86/kvm/vmx.c | 5 +++++ >> 1 file changed, 5 insertions(+) >> >> diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c >> index e6c8ffa..6cf3972 100644 >> --- a/arch/x86/kvm/vmx.c >> +++ b/arch/x86/kvm/vmx.c >> @@ -10805,6 +10805,11 @@ static int check_vmentry_postreqs(struct kvm_vcpu >> *vcpu, struct vmcs12 *vmcs12, >> return 1; >> } >> + if (kvm_mpx_supported() && >> + (is_noncanonical_address(vmcs12->guest_bndcfgs & >> PAGE_MASK, vcpu) || >> + (vmcs12->guest_bndcfgs & MSR_IA32_BNDCFGS_RSVD))) >> + return 1; >> + >> return 0; >> } >> > > Hi Wanpeng, > The SDM check is performed only when "load IA32_BNDCFGS" VM-entry control > is 1. But vmx_mpx_supported() returns true when both "load IA32_BNDCFGS" and > "store IA32_BNDCFGS" VM-entry controls are 1. Therefore your check is > performed when both controls are 1. Did I miss something here ? https://lkml.org/lkml/2017/11/2/748 Paolo hopes the simplification. Regards, Wanpeng Li