BPF List
 help / color / mirror / Atom feed
From: sashiko-bot@kernel.org
To: "Yonghong Song" <yonghong.song@linux.dev>
Cc: bpf@vger.kernel.org
Subject: Re: [PATCH bpf-next v4 01/15] bpf: Read a kfunc's __sz argument only when it is in a register
Date: Sat, 12 Sep 2026 20:06:44 +0000	[thread overview]
Message-ID: <20260912200645.208041F000FF@smtp.kernel.org> (raw)
In-Reply-To: <20260912195201.982215-1-yonghong.song@linux.dev>

Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:

Pre-existing issues:
- [High] Missing negative bounds check for enum parameters in memcg kfuncs allows out-of-bounds array read
--

commit 5816e44e0d469f2be29753390131ba5c9f8fd073
Author: Yonghong Song <yonghong.song@linux.dev>

bpf: Read a kfunc's __sz argument only when it is in a register

This commit fixes an issue where an out-of-bounds index could be used to read
from const_reg_vals[] when a kfunc receives a stack argument pair of a
pointer and size. It ensures size_reg is bounded by MAX_BPF_FUNC_REG_ARGS
to prevent reading unrelated callee-saved registers.

> diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c
> index 617a277c3558c..0c6a404167ca4 100644
> --- a/kernel/bpf/verifier.c
> +++ b/kernel/bpf/verifier.c
> @@ -13641,13 +13641,14 @@ s64 bpf_kfunc_stack_access_bytes(struct bpf_verifier_env *env, struct bpf_insn *
>  		goto out;
>  	}
>  
> -	/* ptr + __sz/__szk pair: size is in the next register */
> +	/* ptr + __sz/__szk pair: the size follows the pointer */
>  	if (arg + 1 < nargs &&
>  	    (btf_param_match_suffix(btf, &args[arg + 1], "__sz") ||
>  	     btf_param_match_suffix(btf, &args[arg + 1], "__szk"))) {
>  		int size_reg = BPF_REG_1 + arg + 1;
>  
> -		if (aux->const_reg_mask & BIT(size_reg)) {
> +		if (size_reg <= MAX_BPF_FUNC_REG_ARGS &&
> +		    (aux->const_reg_mask & BIT(size_reg))) {
>  			size = (s64)aux->const_reg_vals[size_reg];
>  			goto out;
>  		}

[Severity: High]
This is a pre-existing issue, but I noticed a potential problem with how the
verifier handles enum arguments for kfuncs, specifically in the memcg
kfuncs.

Since the BPF verifier treats enum types as plain signed integers and does not
enforce enum ranges natively, BPF programs can pass negative scalar values
to kfuncs.

In mm/bpf_memcontrol.c:bpf_mem_cgroup_memory_events():

	if (unlikely(event >= MEMCG_NR_MEMORY_EVENTS))
		return (unsigned long)-1;

	return atomic_long_read(&memcg->memory_events[event]);

Does this signed comparison without a negative bound allow a negative
event value to bypass the check and cause an out-of-bounds read on the
memory_events array?

Similarly, in mm/bpf_memcontrol.c:bpf_mem_cgroup_vm_events():

	if (unlikely(!memcg_vm_event_item_valid(event)))
		return (unsigned long)-1;

	return memcg_events(memcg, event);

And the check in mm/memcontrol.c:memcg_vm_event_item_valid():

	if (idx >= NR_VM_EVENT_ITEMS)
		return false;

	return !BAD_STAT_IDX(memcg_events_index(idx));

Could a negative idx here bypass the bounds check and lead to an
out-of-bounds access on the mem_cgroup_events_index array?

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20260912195156.980886-1-yonghong.song@linux.dev?part=1

  reply	other threads:[~2026-09-12 20:06 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-09-12 19:51 [PATCH bpf-next v4 00/15] bpf: Support by-value struct and __int128 arguments Yonghong Song
2026-09-12 19:52 ` [PATCH bpf-next v4 01/15] bpf: Read a kfunc's __sz argument only when it is in a register Yonghong Song
2026-09-12 20:06   ` sashiko-bot [this message]
2026-09-13  2:40     ` Yonghong Song
2026-09-12 19:52 ` [PATCH bpf-next v4 02/15] selftests/bpf: Add a test for an __int128 by-value argument Yonghong Song
2026-09-12 19:52 ` [PATCH bpf-next v4 03/15] bpf: Rename bpf_subprog_info::arg_cnt to arg_slot_cnt Yonghong Song
2026-09-12 19:52 ` [PATCH bpf-next v4 04/15] bpf: Index global function arguments by argument slot Yonghong Song
2026-09-12 19:52 ` [PATCH bpf-next v4 05/15] bpf: Support by-value struct arguments up to 16 bytes Yonghong Song
2026-09-12 19:52 ` [PATCH bpf-next v4 06/15] bpf: Support __int128 as a by-value function argument Yonghong Song
2026-09-12 19:52 ` [PATCH bpf-next v4 07/15] bpf: Rename bpf_call_summary::num_params to arg_slot_cnt Yonghong Song
2026-09-12 19:52 ` [PATCH bpf-next v4 08/15] bpf: Recognize by-value struct and __int128 kfunc arguments Yonghong Song
2026-09-12 19:52 ` [PATCH bpf-next v4 09/15] bpf: Prepare kfunc arguments for the JIT from an ABI description Yonghong Song
2026-09-12 20:10   ` sashiko-bot
2026-09-12 19:52 ` [PATCH bpf-next v4 10/15] bpf, x86: Move kfunc arguments into the x86-64 calling convention Yonghong Song
2026-09-12 19:52 ` [PATCH bpf-next v4 11/15] bpf, arm64: Place trampoline arguments by the arm64 " Yonghong Song
2026-09-13  2:47   ` Yonghong Song
2026-09-12 19:52 ` [PATCH bpf-next v4 12/15] bpf, arm64: Move kfunc arguments into " Yonghong Song
2026-09-12 19:53 ` [PATCH bpf-next v4 13/15] selftests/bpf: Add C tests for by-value arguments up to 16 bytes Yonghong Song
2026-09-12 19:53 ` [PATCH bpf-next v4 14/15] selftests/bpf: Add inline-asm tests for by-value arguments Yonghong Song
2026-09-12 19:53 ` [PATCH bpf-next v4 15/15] selftests/bpf: Add tests for by-value kfunc arguments Yonghong Song
2026-09-13  4:00 ` [PATCH bpf-next v4 00/15] bpf: Support by-value struct and __int128 arguments patchwork-bot+netdevbpf

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=20260912200645.208041F000FF@smtp.kernel.org \
    --to=sashiko-bot@kernel.org \
    --cc=bpf@vger.kernel.org \
    --cc=sashiko-reviews@lists.linux.dev \
    --cc=yonghong.song@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