Re: [PATCH RFC bpf-next 1/8] kasan: expose generic kasan helpers
From: Andrey Konovalov
Date: Tue Apr 14 2026 - 11:11:18 EST
On Tue, Apr 14, 2026 at 4:36 PM Alexei Starovoitov
<alexei.starovoitov@xxxxxxxxx> wrote:
>
> > ACK, I'll try to use those kasan_check_read and kasan_check_write rather
> > than __asan_{load,store}X.
>
> No. The performance penalty will be too high.
With using __asan_load/storeX(), it will be one function call to get
to check_region_inline(): __asan_load/storeX->check_region_inline.
With kasan_check_read/write(), right now, it would be two function
calls: __kasan_check_read->kasan_check_range->check_region_inline.
I doubt an extra function call would make a difference in terms of
performance: the shadow checking itself is also expensive.
But if the second call is a concern, we can move kasan_check_range()
and lower-level functions into mm/kasan/generic.h and include it into
shadow.c, and then it will be just one function call.
To improve performance further, the JIT compiler could emit inlined
shadow checking instructions, same as the C compiler does with
KASAN_INLINE=y.
> hw_tags won't work without corresponding JIT work.
You probably meant SW_TAGS here.
HW_TAGS will likely just work without any JIT changes (even the
kasan_check_byte() thing I mentioned should not be required), assuming
JIT'ed BPF code just accesses kernel-returned pointers as is.
> I see no point sacrificing performance for aesthetics.
With the change I suggested above, there would be no performance
difference. And the code stays cleaner.
> __asan_load/storeX is what compilers emit.
For Generic mode. For SW_TAGS, the function names are different.
Keeping this detail within the KASAN code is cleaner.
> In that sense JIT is a compiler it should emit exactly the same.