Re: [PATCH mm 2/4] kasan: handle concurrent kasan_record_aux_stack calls

From: Andrey Konovalov
Date: Wed Dec 13 2023 - 19:42:04 EST


On Wed, Dec 13, 2023 at 5:51 PM Marco Elver <elver@xxxxxxxxxx> wrote:
>
> > > [1]: Since a depot stack handle is just an u32, we can have a
> > >
> > > union {
> > > depot_stack_handle_t handles[2];
> > > atomic64_t atomic_handle;
> > > } aux_stack;
> > > (BUILD_BUG_ON somewhere if sizeof handles and atomic_handle mismatch.)
> > >
> > > Then in the code here create the same union and load atomic_handle.
> > > Swap handle[1] into handle[0] and write the new one in handles[1].
> > > Then do a cmpxchg loop to store the new atomic_handle.
> >
> > This approach should work. If you prefer, I can do this instead of a spinlock.
> >
> > But we do need some kind of atomicity while rotating the aux handles
> > to make sure nothing gets lost.
>
> Yes, I think that'd be preferable. Although note that not all 32-bit
> architectures have 64-bit atomics, so that may be an issue. Another
> alternative is to have a spinlock next to the aux_stack (it needs to
> be initialized properly). It'll use up a little more space, but that's
> for KASAN configs only, so I think it's ok. Certainly better than a
> global lock.

Ah, hm, actually this is what I indented to do with this change. But
somehow my brain glitched out and decided to use a global lock :)

I'll change this into a local spinlock in v2.

Thank you!