[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH] xen/x86: irq: Avoid a TOCTOU race in pirq_spin_lock_irq_desc()


  • To: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
  • From: Roger Pau Monné <roger.pau@xxxxxxxxxx>
  • Date: Tue, 18 Aug 2020 12:13:26 +0200
  • Authentication-results: esa6.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none
  • Cc: Julien Grall <julien@xxxxxxx>, Jan Beulich <jbeulich@xxxxxxxx>, <xen-devel@xxxxxxxxxxxxxxxxxxxx>, Julien Grall <jgrall@xxxxxxxxxx>, Wei Liu <wl@xxxxxxx>
  • Delivery-date: Tue, 18 Aug 2020 10:13:44 +0000
  • Ironport-sdr: oNF9japKYAWwyWMNzYoWd/VxfpYi8fIIKDhhMWJbOMxMVdm/Adl18MxFVrGCujYMIXKBDXy6C7 W5sNt7KHtL3mZXVzzPzjIaR2tH5f4EpLZ9/FInfuOgS/xt/DvyeV/rnZfhG8+BItv5i2sYw2vi xIm6W0YcVnLHbtx63/uNKv+oQjywKfYLHnXVnxImmiOKZKVKUKa1Ev/w5YfftYegPeYnEFrtIU ch8e/h3dQHkJMWAkgeRRiO0qPj8QxMgUcEdrUiYmlU56S7DXrRQvhjSSE1xpvNZ61t0t48owQf cqc=
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>

On Thu, Jul 23, 2020 at 02:59:57PM +0100, Andrew Cooper wrote:
> On 23/07/2020 14:22, Julien Grall wrote:
> > Hi Jan,
> >
> > On 23/07/2020 12:23, Jan Beulich wrote:
> >> On 22.07.2020 18:53, Julien Grall wrote:
> >>> --- a/xen/arch/x86/irq.c
> >>> +++ b/xen/arch/x86/irq.c
> >>> @@ -1187,7 +1187,7 @@ struct irq_desc *pirq_spin_lock_irq_desc(
> >>>         for ( ; ; )
> >>>       {
> >>> -        int irq = pirq->arch.irq;
> >>> +        int irq = read_atomic(&pirq->arch.irq);
> >>
> >> There we go - I'd be fine this way, but I'm pretty sure Andrew
> >> would want this to be ACCESS_ONCE(). So I guess now is the time
> >> to settle which one to prefer in new code (or which criteria
> >> there are to prefer one over the other).
> >
> > I would prefer if we have a single way to force the compiler to do a
> > single access (read/write).
> 
> Unlikely to happen, I'd expect.
> 
> But I would really like to get rid of (or at least rename)
> read_atomic()/write_atomic() specifically because they've got nothing to
> do with atomic_t's and the set of functionality who's namespace they share.

I've been thinking about this a bit, and maybe the problem is the
other way around. Having an 'atomic' type doesn't make much sense IMO,
because atomicity is not (solely) based on the type but rather on how
the accesses are performed.

Maybe it would make more sense to rename atomic_t to counter_t: a
counter that guarantees atomic accesses. Then the atomic namespace
could be used to implement the low level helpers that actually
guarantee atomicity and support a wider set of types than what
atomic_t currently is (ie: an int).

Roger.



 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.