On Fri, 19 Dec 2025 at 21:48, 'Bart Van Assche' via kasan-dev <[email protected]> wrote: > > On 12/19/25 7:40 AM, Marco Elver wrote: > > +/* > > + * For static context analysis, we need a unique token for each possible > > bit > > + * that can be used as a bit_spinlock. The easiest way to do that is to > > create a > > + * fake context that we can cast to with the __bitlock(bitnum, addr) macro > > + * below, which will give us unique instances for each (bit, addr) pair > > that the > > + * static analysis can use. > > + */ > > +context_lock_struct(__context_bitlock) { }; > > +#define __bitlock(bitnum, addr) (struct __context_bitlock *)(bitnum + > > (addr)) > > Will this cause static analyzers to complain about out-of-bounds > accesses for (bitnum + (addr)), which is equivalent to &(addr)[bitnum]?
Only if they decide to interpret never-executed code (i think the kernel has various dead code that's optimized out that might trigger static analyzers if they analyzed it). But this could probably be improved by using a different idiom, and using an empty inline function that takes bitnum, addr as args, and Clang simply takes the call to that function as the context lock identity.
