From: sashiko-bot@kernel.org
To: "Alexis Lothoré (eBPF Foundation)" <alexis.lothore@bootlin.com>
Cc: bpf@vger.kernel.org
Subject: Re: [PATCH RFC bpf-next 2/8] bpf: mark instructions accessing program stack
Date: Sat, 25 Apr 2026 05:05:56 +0000 [thread overview]
Message-ID: <20260425050557.827F3C2BCB2@smtp.kernel.org> (raw)
In-Reply-To: <20260413-kasan-v1-2-1a5831230821@bootlin.com>
Sashiko AI review found 4 potential issue(s):
- [High] An instruction aliasing PTR_TO_STACK and other pointer types (e.g., PTR_TO_MAP_VALUE) will permanently be marked with accesses_stack = true, improperly bypassing KASAN monitoring for the non-stack access.
- [High] Instruction patching drops the accesses_stack flag from memory access instructions, causing unintended KASAN checks on stack accesses.
- [High] bpf_insn_accesses_stack() unconditionally returns false when env == NULL, breaking KASAN suppression for classic BPF (cBPF) programs.
- [Medium] Stack accesses inside global subprograms lack the accesses_stack flag, leading to unintended KASAN checks when stack pointers are passed to them.
--
commit 58c92691d6de0f6cbdbd48cc21d31e0a14a4fffa
Author: Alexis Lothoré (eBPF Foundation) <alexis.lothore@bootlin.com>
bpf: mark instructions accessing program stack
In order to prepare to emit KASAN checks in JITed programs, JIT
compilers need to be aware about whether some load/store instructions
are targeting the bpf program stack. Make the BPF verifier mark the
instructions that access program stack.
> diff --git a/kernel/bpf/core.c b/kernel/bpf/core.c
> index 8b018ff488750..340abfdadbedb 100644
> --- a/kernel/bpf/core.c
> +++ b/kernel/bpf/core.c
[ ... ]
> @@ -1582,6 +1582,16 @@ bool bpf_insn_is_indirect_target(const struct bpf_verifier_env *env, const struc
> insn_idx += prog->aux->subprog_start;
> return env->insn_aux_data[insn_idx].indirect_target;
> }
> +
> +bool bpf_insn_accesses_stack(const struct bpf_verifier_env *env,
> + const struct bpf_prog *prog, int insn_idx)
> +{
> + if (!env)
> + return false;
Classic BPF (cBPF) programs are converted to eBPF and JIT-compiled directly,
bypassing the eBPF verifier, so env is NULL. The converted eBPF instructions
heavily use BPF_REG_FP for scratch memory accesses.
Because this returns false when env is NULL, will JIT compilers incorrectly
emit KASAN checks for all cBPF stack memory accesses?
Could this inspect the instruction directly when env == NULL (e.g., checking
if insn->dst_reg == BPF_REG_FP or insn->src_reg == BPF_REG_FP) to prevent
false positive KASAN splats for valid cBPF programs?
> + insn_idx += prog->aux->subprog_start;
> + return env->insn_aux_data[insn_idx].accesses_stack;
> +}
> +
> #endif /* CONFIG_BPF_JIT */
> diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c
> index 69d75515ed3f7..1ce0388847b2b 100644
> --- a/kernel/bpf/verifier.c
> +++ b/kernel/bpf/verifier.c
> @@ -3502,6 +3502,11 @@ static void mark_indirect_target(struct bpf_verifier_env *env, int idx)
> env->insn_aux_data[idx].indirect_target = true;
> }
>
> +static void mark_insn_accesses_stack(struct bpf_verifier_env *env, int idx)
> +{
> + env->insn_aux_data[idx].accesses_stack = true;
> +}
> +
If an instruction aliases PTR_TO_STACK and other pointer types (e.g.,
PTR_TO_MAP_VALUE) across different execution paths, check_mem_access() will
call this and permanently set accesses_stack = true when evaluating the stack
path.
When the PTR_TO_MAP_VALUE path is evaluated, the accesses_stack flag remains
true. Will this cause the map value access to completely bypass KASAN
monitoring during JIT compilation?
Additionally, when the verifier patches an instruction (e.g., for
zero-extension via bpf_patch_insn_data()), adjust_insn_aux_data() shifts the
original auxiliary data to the last instruction of the newly inserted patch
sequence.
For patches like zero-extension, a BPF_MOV is inserted after the original
BPF_LDX_MEM instruction. Does the accesses_stack flag thus move to the MOV
instruction, while the actual memory load receives zeroed auxiliary data?
Could this result in the JIT compiler erroneously emitting KASAN
instrumentation for these verified stack accesses?
> #define LR_FRAMENO_BITS 3
> #define LR_SPI_BITS 6
[ ... ]
> @@ -6493,6 +6498,8 @@ static int check_mem_access(struct bpf_verifier_env *env, int insn_idx, u32 regn
> else
> err = check_stack_write(env, regno, off, size,
> value_regno, insn_idx);
> +
> + mark_insn_accesses_stack(env, insn_idx);
Global subprograms are verified independently of their call sites, and pointer
arguments are tracked as PTR_TO_MEM rather than PTR_TO_STACK. Inside the
subprogram, check_mem_access() evaluates loads and stores under the
PTR_TO_MEM branch, which does not invoke mark_insn_accesses_stack().
If a BPF caller dynamically passes a pointer to its stack as an argument to
the global subprogram, will the JIT-compiled global subprogram execute with
KASAN checks enabled for those accesses?
Does this erroneously monitor the BPF stack, bypassing the intended
suppression mechanism?
> } else if (reg_is_pkt_pointer(reg)) {
> if (t == BPF_WRITE && !may_access_direct_pkt_data(env, NULL, t)) {
> verbose(env, "cannot write into packet\n");
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260413-kasan-v1-0-1a5831230821@bootlin.com?part=2
next prev parent reply other threads:[~2026-04-25 5:05 UTC|newest]
Thread overview: 39+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-04-13 18:28 [PATCH RFC bpf-next 0/8] bpf: add support for KASAN checks in JITed programs Alexis Lothoré (eBPF Foundation)
2026-04-13 18:28 ` [PATCH RFC bpf-next 1/8] kasan: expose generic kasan helpers Alexis Lothoré (eBPF Foundation)
2026-04-13 22:19 ` Andrey Konovalov
2026-04-14 13:12 ` Alexis Lothoré
2026-04-14 14:36 ` Alexei Starovoitov
2026-04-14 15:10 ` Andrey Konovalov
2026-04-14 15:58 ` Alexei Starovoitov
2026-04-19 21:48 ` Andrey Konovalov
2026-04-19 22:51 ` Alexei Starovoitov
2026-04-20 14:27 ` Alexis Lothoré
2026-04-24 23:31 ` Ihor Solodrai
2026-04-14 18:41 ` Alexis Lothoré
2026-04-14 19:16 ` Alexei Starovoitov
2026-04-14 20:44 ` Alexis Lothoré
2026-04-25 3:13 ` sashiko-bot
2026-04-13 18:28 ` [PATCH RFC bpf-next 2/8] bpf: mark instructions accessing program stack Alexis Lothoré (eBPF Foundation)
2026-04-24 23:18 ` Ihor Solodrai
2026-04-25 5:05 ` sashiko-bot [this message]
2026-04-13 18:28 ` [PATCH RFC bpf-next 3/8] bpf: add BPF_JIT_KASAN for KASAN instrumentation of JITed programs Alexis Lothoré (eBPF Foundation)
2026-04-13 22:20 ` Andrey Konovalov
2026-04-14 13:24 ` Alexis Lothoré
2026-04-14 14:38 ` Alexei Starovoitov
2026-04-25 5:18 ` sashiko-bot
2026-04-13 18:28 ` [PATCH RFC bpf-next 4/8] bpf, x86: add helper to emit kasan checks in x86 " Alexis Lothoré (eBPF Foundation)
2026-04-25 5:46 ` sashiko-bot
2026-04-13 18:28 ` [PATCH RFC bpf-next 5/8] bpf, x86: emit KASAN checks into " Alexis Lothoré (eBPF Foundation)
2026-04-25 6:08 ` sashiko-bot
2026-04-13 18:28 ` [PATCH RFC bpf-next 6/8] selftests/bpf: do not run verifier JIT tests when BPF_JIT_KASAN is enabled Alexis Lothoré (eBPF Foundation)
2026-04-25 6:21 ` sashiko-bot
2026-04-13 18:28 ` [PATCH RFC bpf-next 7/8] bpf, x86: enable KASAN for JITed programs on x86 Alexis Lothoré (eBPF Foundation)
2026-04-25 6:33 ` sashiko-bot
2026-04-13 18:28 ` [PATCH RFC bpf-next 8/8] selftests/bpf: add tests to validate KASAN on JIT programs Alexis Lothoré (eBPF Foundation)
2026-04-13 22:20 ` Andrey Konovalov
2026-04-14 13:43 ` Alexis Lothoré
2026-04-25 6:50 ` sashiko-bot
2026-04-24 23:10 ` [PATCH RFC bpf-next 0/8] bpf: add support for KASAN checks in JITed programs Ihor Solodrai
2026-04-24 23:28 ` Alexei Starovoitov
2026-04-27 8:54 ` Alexis Lothoré
2026-04-27 8:45 ` 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=20260425050557.827F3C2BCB2@smtp.kernel.org \
--to=sashiko-bot@kernel.org \
--cc=alexis.lothore@bootlin.com \
--cc=bpf@vger.kernel.org \
--cc=sashiko@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox