All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Alexis Lothoré" <alexis.lothore@bootlin.com>
To: <sashiko-reviews@lists.linux.dev>
Cc: <bpf@vger.kernel.org>
Subject: Re: [PATCH bpf-next v3 03/10] bpf: add BPF_JIT_KASAN for KASAN instrumentation of JITed programs
Date: Tue, 07 Jul 2026 14:07:39 +0200	[thread overview]
Message-ID: <DJSBRX3VVLCU.13U4DZX2R4FRJ@bootlin.com> (raw)
In-Reply-To: <20260701101211.AAD851F00A3D@smtp.kernel.org>

On Wed Jul 1, 2026 at 12:12 PM CEST, sashiko-bot wrote:
> Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
> - [Medium] BPF_JIT_KASAN needlessly restricts its availability by unconditionally requiring VMAP_STACK.
> --
>
> commit 23714982e1ca6e827ba19b9f4c74b703b4ad2090
> Author: Alexis Lothoré (eBPF Foundation) <alexis.lothore@bootlin.com>
>
> bpf: add BPF_JIT_KASAN for KASAN instrumentation of JITed programs
>
> This commit introduces CONFIG_BPF_JIT_KASAN to enable generic KASAN memory
> access checks for JIT-compiled BPF programs. The JIT compiler emits shadow
> memory checks before memory accesses to detect bugs like use-after-free or
> out-of-bounds at runtime. The feature is gated behind HAVE_EBPF_JIT_KASAN.
>
>> As KASAN instrumentation for eBPF program will depend on the info that
>> can be accessed during each instruction verification, there may be
>> instructions that will be instrumented even if they don't really need to
>> (eg: global subprograms that access caller stack memory passed as
>> argument). To make sure that those additional checks do not trigger any
>> crash, make sure that VMAP_STACK is enabled so that programs stack has
>> shadow memory allocated.
>
> [Severity: Medium]
> Does generic KASAN already map shadow memory for the entire linear mapping?
> If VMAP_STACK is disabled, the kernel stack resides in the linear mapping,
> which should already have shadow memory allocated. Could this justification
> be slightly misunderstanding the default generic KASAN shadow memory coverage?
>
>> diff --git a/kernel/bpf/Kconfig b/kernel/bpf/Kconfig
>> --- a/kernel/bpf/Kconfig
>> +++ b/kernel/bpf/Kconfig
>
> [ ... ]
>
>> @@ -101,4 +105,9 @@ config BPF_LSM
>>  
>>  	  If you are unsure how to answer this question, answer N.
>>  
>> +config BPF_JIT_KASAN
>> +	bool
>> +	depends on HAVE_EBPF_JIT_KASAN
>> +	default y if BPF_JIT && KASAN_GENERIC && KASAN_VMALLOC && VMAP_STACK
>
> [Severity: Medium]
> Is it necessary to unconditionally require VMAP_STACK for BPF_JIT_KASAN?
>
> Following up on the commit message note, since generic KASAN covers the
> linear mapping where non-VMAP stacks reside, this condition might needlessly
> disable a useful security and debugging feature on kernel configurations
> where VMAP_STACK happens to be turned off.

This indeed looks over-constraining. To clarify my original intent (and
make sure that I am not overthinking it):

- the current series does its best to skip instrumentation for memory
  accesses that target the BPF program stack
- there are some cases where it is hard or not even possible to guess if
  the memory access is on stack or not (eg: the verifier fixups that
  generate memory-accessing instructions).
- there are two strategies for those "unknown" accesses: either skip
  KASAN for those, with the risk of missing illegitimate accesses
  because instrumentation has been skipped, or systematically inserting
  KASAN checks, at the risk of slightly over-instrumenting accesses
  (some of those will access stack). The latter is chosen by the current
  implementation
- if CONFIG_VMAP_STACK is selected (and !private_stack) but
  CONFIG_KASAN_VMALLOC is not, those few over-instrumented sites may
  trigger crashes because there's no shadow memory for those

I am now realizing that this situation can't happen for BPF JIT, as
VMAP_STACK depends on :

  !KASAN || KASAN_HW_TAGS || KASAN_VMALLOC
 
So I'll just drop the dependency on VMAP_STACK

Alexis

-- 
Alexis Lothoré, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com


  reply	other threads:[~2026-07-07 12:07 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-07-01 10:02 [PATCH bpf-next v3 00/10] bpf: add support for KASAN checks in JITed programs Alexis Lothoré (eBPF Foundation)
2026-07-01 10:02 ` [PATCH bpf-next v3 01/10] bpf: propagate original instruction offset when patching program Alexis Lothoré (eBPF Foundation)
2026-07-01 10:20   ` sashiko-bot
2026-07-01 10:02 ` [PATCH bpf-next v3 02/10] bpf: mark instructions accessing program stack Alexis Lothoré (eBPF Foundation)
2026-07-01 10:19   ` sashiko-bot
2026-07-01 10:02 ` [PATCH bpf-next v3 03/10] bpf: add BPF_JIT_KASAN for KASAN instrumentation of JITed programs Alexis Lothoré (eBPF Foundation)
2026-07-01 10:12   ` sashiko-bot
2026-07-07 12:07     ` Alexis Lothoré [this message]
2026-07-01 10:44   ` bot+bpf-ci
2026-07-01 13:43   ` Andrey Konovalov
2026-07-06 14:16     ` Alexis Lothoré
2026-07-06 15:02       ` Andrey Konovalov
2026-07-01 10:02 ` [PATCH bpf-next v3 04/10] bpf, x86: add helper to emit kasan checks in x86 " Alexis Lothoré (eBPF Foundation)
2026-07-01 10:16   ` sashiko-bot
2026-07-07 13:44     ` Alexis Lothoré
2026-07-01 10:44   ` bot+bpf-ci
2026-07-07 14:04     ` Alexis Lothoré
2026-07-01 10:02 ` [PATCH bpf-next v3 05/10] bpf, x86: refactor BPF_ST management in do_jit Alexis Lothoré (eBPF Foundation)
2026-07-01 10:02 ` [PATCH bpf-next v3 06/10] bpf, x86: emit KASAN checks into x86 JITed programs Alexis Lothoré (eBPF Foundation)
2026-07-01 10:18   ` sashiko-bot
2026-07-01 10:44   ` bot+bpf-ci
2026-07-01 10:02 ` [PATCH bpf-next v3 07/10] bpf, x86: enable KASAN for JITed programs on x86 Alexis Lothoré (eBPF Foundation)
2026-07-01 10:15   ` sashiko-bot
2026-07-01 10:02 ` [PATCH bpf-next v3 08/10] selftests/bpf: add helper to check whether eBPF KASAN is active Alexis Lothoré (eBPF Foundation)
2026-07-01 10:02 ` [PATCH bpf-next v3 09/10] selftests/bpf: move bpf_jit_harden helper into testing_helpers Alexis Lothoré (eBPF Foundation)
2026-07-01 10:02 ` [PATCH bpf-next v3 10/10] selftests/bpf: add tests to validate KASAN on JIT programs Alexis Lothoré (eBPF Foundation)
2026-07-01 10:34   ` sashiko-bot
2026-07-07 14:13     ` Alexis Lothoré

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=DJSBRX3VVLCU.13U4DZX2R4FRJ@bootlin.com \
    --to=alexis.lothore@bootlin.com \
    --cc=bpf@vger.kernel.org \
    --cc=sashiko-reviews@lists.linux.dev \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.