[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 1/6] x86: stop handling MSR_IA32_BNDCFGS save/restore in implementation code
>>> On 07.01.19 at 13:02, <paul.durrant@xxxxxxxxxx> wrote: > --- a/xen/arch/x86/hvm/hvm.c > +++ b/xen/arch/x86/hvm/hvm.c > @@ -308,11 +308,16 @@ int hvm_set_guest_pat(struct vcpu *v, u64 guest_pat) > return 1; > } > > -bool hvm_set_guest_bndcfgs(struct vcpu *v, u64 val) > +bool hvm_set_guest_bndcfgs(struct vcpu *v, uint64_t val) > { > - if ( !hvm_funcs.set_guest_bndcfgs || > - !is_canonical_address(val) || > - (val & IA32_BNDCFGS_RESERVED) ) > + const struct cpuid_policy *cp = v->domain->arch.cpuid; > + > + if ( !cp->feat.mpx ) Is the local variable really worth it? > + return false; > + > + ASSERT(hvm_funcs.set_guest_bndcfgs); I think it would be better (more safe for release builds) if this was left as part of the if(). Otherwise, ... > @@ -342,7 +347,22 @@ bool hvm_set_guest_bndcfgs(struct vcpu *v, u64 val) > /* nothing, best effort only */; > } > > - return hvm_funcs.set_guest_bndcfgs(v, val); > + hvm_funcs.set_guest_bndcfgs(v, val); ... you risk calling NULL here. > @@ -3472,12 +3494,6 @@ int hvm_msr_read_intercept(unsigned int msr, uint64_t > *msr_content) > *msr_content = v->arch.hvm.msr_xss; > break; > > - case MSR_IA32_BNDCFGS: > - if ( !d->arch.cpuid->feat.mpx || > - !hvm_get_guest_bndcfgs(v, msr_content) ) > - goto gp_fault; > - break; Note how this already checks the CPUID policy, somewhat contrary to what you say in the commit message. I think this wants to remain this way in guest_{rd,wr}msr() - see all the other CPUID policy checks there. That way hvm_get_guest_bndcfgs() can be made consistent with the hook pointer type again, and it can remain an inline function as before. Jan _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |