[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v6.5 20/26] x86: Protect unaware domains from meddling hyperthreads
On 04/01/18 09:59, Jan Beulich wrote: >>>> On 04.01.18 at 01:15, <andrew.cooper3@xxxxxxxxxx> wrote: >> Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> > Fundamentally (as before) > Reviewed-by: Jan Beulich <jbeulich@xxxxxxxx> > However: > >> --- a/xen/arch/x86/domain.c >> +++ b/xen/arch/x86/domain.c >> @@ -2027,6 +2027,25 @@ int domain_relinquish_resources(struct domain *d) >> */ >> void cpuid_policy_updated(struct vcpu *v) >> { >> + const struct cpuid_policy *cp = v->domain->arch.cpuid; >> + struct msr_vcpu_policy *vp = v->arch.msr; >> + >> + /* >> + * For guests which know about IBRS but are not told about STIBP running >> + * on hardware supporting hyperthreading, the guest doesn't know to >> + * protect itself fully. (Such a guest won't be permitted direct access >> + * to the MSR.) Have Xen fill in the gaps, so an unaware guest can't be >> + * interfered with by a meddling guest on an adjacent hyperthread. >> + */ >> + if ( cp->feat.ibrsb ) >> + { >> + if ( !cp->feat.stibp && cpu_has_stibp && >> + !(vp->spec_ctrl.guest & (SPEC_CTRL_IBRS | SPEC_CTRL_STIBP)) ) >> + vp->spec_ctrl.host = SPEC_CTRL_STIBP; >> + else >> + vp->spec_ctrl.host = vp->spec_ctrl.guest; > This code is so similar to ... > >> --- a/xen/arch/x86/msr.c >> +++ b/xen/arch/x86/msr.c >> @@ -181,7 +181,20 @@ int guest_wrmsr(struct vcpu *v, uint32_t msr, uint64_t >> val) >> (cp->feat.stibp ? SPEC_CTRL_STIBP : 0)) ) >> goto gp_fault; /* Rsvd bit set? */ >> vp->spec_ctrl.guest = val; >> - vp->spec_ctrl.host = val; >> + >> + /* >> + * For guests which are not told about STIBP, running on hardware >> + * supporting hyperthreading, the guest doesn't know to protect >> itself >> + * fully. (Such a guest won't be permitted direct access to the >> MSR.) >> + * When IBRS is not in force, have Xen fill in the gaps, so an >> unaware >> + * guest can't be interfered with by a meddling guest on an adjacent >> + * hyperthread. >> + */ >> + if ( !cp->feat.stibp && cpu_has_stibp && >> + !(val & (SPEC_CTRL_IBRS | SPEC_CTRL_STIBP)) ) >> + vp->spec_ctrl.host = SPEC_CTRL_STIBP; >> + else >> + vp->spec_ctrl.host = val; > ... this that I think a helper function would be warranted, unless you > have reasons to believe that future changes might break the > similarity. I don't expect them to diverge, and will pull it out into a separate helper. > > I'm also a little puzzled by you checking SPEC_CTRL_STIBP there - > this bit ought to be clear when !cp->feat.stibp due to the earlier > reserved bit check (part of which is even visible in context above). > IOW the check is not wrong, but perhaps misleading. You had > replied to this remark with > > "The SPEC_CTRL_STIBP check exists solely because of v3 review which > objected to me implying a link between IBRS and STIPB." The original logic was was "!cp->feat.stibp && cpu_has_stibp && val == 0", which you argued would go stale as new SPEC_CTRL_ bits got added. ~Andrew _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |