On Wed, 19 Dec 2018, Richard Earnshaw (lists) wrote:

> On 19/12/2018 17:17, Richard Biener wrote:
> > On Wed, 19 Dec 2018, Florian Weimer wrote:
> > 
> >> * Peter Bergner:
> >>
> >>> On 12/19/18 7:59 AM, Florian Weimer wrote:
> >>>> * Richard Biener:
> >>>>
> >>>>> Sure, if we'd ever deploy this in production placing this in the
> >>>>> TCB for glibc targets might be beneifical.  But as said the
> >>>>> current implementation was just an experiment intended to be
> >>>>> maximum portable.  I suppose the dynamic loader takes care
> >>>>> of initializing the TCB data?
> >>>>
> >>>> Yes, the dynamic linker will initialize it.  If you need 100% reliable
> >>>> initialization with something that is not zero, it's going to be tricky
> >>>> though.  Initial-exec TLS memory has this covered, but in the TCB, we
> >>>> only have zeroed-out reservations today.
> >>>
> >>> We have non-zero initialized TCB entries on powerpc*-linux which are used
> >>> for the GCC __builtin_cpu_is() and __builtin_cpu_supports() builtin
> >>> functions.  Tulio would know the magic that was used to get them setup.
> >>
> >> Yes, there's a special symbol, __parse_hwcap_and_convert_at_platform, to
> >> verify that the dynamic linker sets up the TCB as required.  This way,
> >> binaries which need the feature will fail to run on older loaders.  This
> >> is why I said it's a bit tricky to implement this.  It's even more
> >> complicated if you want to backport this into released glibcs, where we
> >> normally do not accept ABI changes (not even ABI additions).
> > 
> > It's easy to change the mitigation scheme to use a zero for the
> > non-speculated path, you'd simply replace ands with zero by
> > ors with -1.  For address parts that gets you some possible overflows
> > you do not want though.
> 
> And you have to invert the value before using it as a mask.

For the cases an OR doesn't work yes.  Fortunately most targets
have an and-not instruction.  (x86 doesn't unless you have BMI)

Richard.

Reply via email to