Re: [PATCH] futex: Set USER_DS for the futex_detect_cmpxchg() test

From: Thomas Gleixner
Date: Fri Sep 28 2018 - 04:31:41 EST


On Fri, 28 Sep 2018, Geert Uytterhoeven wrote:
>
> On Fri, Sep 28, 2018 at 8:21 AM Thomas Gleixner <tglx@xxxxxxxxxxxxx> wrote:
> > On Thu, 27 Sep 2018, Andy Lutomirski wrote:
> > > I have a couple questions here:
> > >
> > > - Is this actually okay on all architectures? That is, are there
> > > cases where we'll screw up if we fail a USER_DS access this early?
> > > s390 stands out as the obvious special case (where USER_DS is not
> > > than just a subset of KERNEL_DS), but s390 opts out.
> > >
> > > - Why doesn't x86 set HAVE_FUTEX_CMPXCHG? Or do we still support
> > > some 32-bit configurations that don't have cmpxchg and don't know
> > > about it at compile time?
> >
> > I'm not entirely sure. Have to dig into the details. I assume S390 just can
> > set it though.
>
> Not sure. My "[PATCH] futex: Switch to USER_DS for futex test"
> (https://www.spinics.net/lists/stable/msg28846.html), which is
> basically the same
> as this patch, broke s390, so it was never merged.
>
> See "[BUG -next] "futex: switch to USER_DS for futex test" breaks s390"
> (https://www.spinics.net/lists/linux-next/msg27902.html)
>
> Heiko said:
> | Martin and I discussed this today and we will change the s390 code so that
> | it will also survive very early USER_DS accesses (without valid current->mm)
> | since we also discovered a couple of other oddities in our code.
>
> I don't know if that has happened, and whether it would work on s390 now.

Duh yes, forgot about that one. But as S390 always has cmpxchg it simply
can set HAVE_FUTEX_CMPXCHG which avoids the check completely.

Surely they want to fix the other oddities or have done so already :)

Thanks,

tglx