Re: [PATCH mm] kfence, x86: fix preemptible warning on KPTI-enabled systems

From: Alexander Potapenko
Date: Thu Apr 01 2021 - 05:12:35 EST


On Tue, Mar 30, 2021 at 8:57 AM Marco Elver <elver@xxxxxxxxxx> wrote:
>
> On systems with KPTI enabled, we can currently observe the following warning:
>
> BUG: using smp_processor_id() in preemptible
> caller is invalidate_user_asid+0x13/0x50
> CPU: 6 PID: 1075 Comm: dmesg Not tainted 5.12.0-rc4-gda4a2b1a5479-kfence_1+ #1
> Hardware name: Hewlett-Packard HP Pro 3500 Series/2ABF, BIOS 8.11 10/24/2012
> Call Trace:
> dump_stack+0x7f/0xad
> check_preemption_disabled+0xc8/0xd0
> invalidate_user_asid+0x13/0x50
> flush_tlb_one_kernel+0x5/0x20
> kfence_protect+0x56/0x80
> ...
>
> While it normally makes sense to require preemption to be off, so that
> the expected CPU's TLB is flushed and not another, in our case it really
> is best-effort (see comments in kfence_protect_page()).
>
> Avoid the warning by disabling preemption around flush_tlb_one_kernel().
>
> Link: https://lore.kernel.org/lkml/YGIDBAboELGgMgXy@xxxxxxxxxxxxxxxx/
> Reported-by: Tomi Sarvela <tomi.p.sarvela@xxxxxxxxx>
> Signed-off-by: Marco Elver <elver@xxxxxxxxxx>
Acked-by: Alexander Potapenko <glider@xxxxxxxxxx>