From: "Kumar Kartikeya Dwivedi" <memxor@gmail.com>
To: "Amery Hung" <ameryhung@gmail.com>, <sashiko-reviews@lists.linux.dev>
Cc: <bpf@vger.kernel.org>
Subject: Re: [PATCH bpf-next v2 02/18] bpf: Unify const map ptr argument checking for helpers and kfuncs
Date: Fri, 24 Jul 2026 23:29:58 +0200 [thread overview]
Message-ID: <DK74DPZIPH5I.2ZST2KB0Y63PY@gmail.com> (raw)
In-Reply-To: <CAMB2axPaPthdQ-pVG0PV21Wzw=dgWnFdPqi5FuJ1EeAEde-P1w@mail.gmail.com>
On Fri Jul 24, 2026 at 10:49 PM CEST, Amery Hung wrote:
> On Fri, Jul 24, 2026 at 12:28 PM <sashiko-bot@kernel.org> wrote:
>>
>> Thank you for your contribution! Sashiko AI review found 3 potential issue(s) to consider:
>>
>> New issues:
>> - [Low] Multi-line comment does not follow the required BPF subsystem comment style.
>>
>> Pre-existing issues:
>> - [Critical] Pre-existing verifier panic when an array map is passed to kfuncs like `bpf_wq_init`.
>> - [High] Pre-existing logic bug allows mismatching maps to bypass safety checks in kfuncs.
>> --
>>
>> --- Patch [2]: [PATCH bpf-next v2 02/18] bpf: Unify const map ptr argument checking for helpers and kfuncs ---
>> commit 08bfe87a36be7126ec3db2d3ab4783e72b62e453
>> Author: Amery Hung <ameryhung@gmail.com>
>>
>> bpf: Unify const map ptr argument checking for helpers and kfuncs
>>
>> Both the helper ARG_CONST_MAP_PTR and the kfunc KF_ARG_PTR_TO_MAP
>> recorded the map pointer in meta->map and, when a map was already
>> bound by a preceding timer/workqueue/task_work argument, rejected a
>> mismatching map. This logic is factored into a single process_map_ptr_arg()
>> used by both paths.
>>
>> > diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c
>> > index e8c76abbf76a2..a3429610b426e 100644
>> > --- a/kernel/bpf/verifier.c
>> > +++ b/kernel/bpf/verifier.c
>> > @@ -8274,6 +8274,44 @@ static int get_constant_map_key(struct bpf_verifier_env *env,
>> >
>> > static bool can_elide_value_nullness(const struct bpf_map *map);
>> >
>> > +static int process_map_ptr_arg(struct bpf_verifier_env *env, struct bpf_reg_state *reg,
>> > + argno_t argno, struct bpf_call_arg_meta *meta)
>> > +{
>> > + /* Use map_uid (which is unique id of inner map) to reject:
>>
>> [Severity: Low]
>> This isn't a bug, but does this multi-line comment follow the preferred BPF
>> subsystem formatting?
>>
>> According to the subsystem guidelines, multi-line comments should have the
>> opening /* on its own line:
>>
>> /*
>> * Use map_uid (which is unique id of inner map) to reject:
>> * ...
>> */
>>
>> [ ... ]
>>
>> > @@ -12122,36 +12140,9 @@ static int check_kfunc_args(struct bpf_verifier_env *env, struct bpf_call_arg_me
>> > reg_arg_name(env, argno));
>> > return -EINVAL;
>> > }
>> > - if (meta->map.ptr && (reg->map_ptr->record->wq_off >= 0 ||
>> > - reg->map_ptr->record->task_work_off >= 0)) {
>>
>> [Severity: Critical]
>> This is a pre-existing issue that was not introduced by this patch (in fact,
>> the patch appears to fix it!), but could the old code crash the verifier here
>> if a BPF program called bpf_wq_init(wq, map, 0) and passed an array map
>> without BTF for the map argument?
>>
>> Since an array map without BTF has a NULL record, evaluating
>> reg->map_ptr->record->wq_off would result in an unconditional NULL pointer
>> dereference, leading to a panic. This could be triggered by any user with
>> privileges to load BPF programs.
>
> [...]
>
>>
>> [Severity: High]
>> This is also a pre-existing issue that was not introduced by this patch, but
>> did this original condition allow mismatching maps to bypass safety checks?
>>
>> If a BPF program called bpf_wq_init(wq, map, 0) with a valid workqueue but
>> passed a mismatched map (like a map containing only a bpf_timer), the
>> mismatched map would lack both wq_off and task_work_off. This would make the
>> condition evaluate to false, bypassing the mismatch rejection and potentially
>> leading to type confusion or memory corruption during runtime callbacks.
>>
>> > - /* Use map_uid (which is unique id of inner map) to reject:
>> > - * inner_map1 = bpf_map_lookup_elem(outer_map, key1)
>
> Yes and that is why this patch use meta->map.ptr->record that is
> already verified. I can also separate it into a standalone fix
> targeting bpf if needed.
>
I think keeping it in your set is fine. Since this is not reported I doubt
anyone hit this in practice, though I agree it's worth fixing.
>>
>> --
>> Sashiko AI review · https://sashiko.dev/#/patchset/20260724190813.1458271-1-ameryhung@gmail.com?part=2
next prev parent reply other threads:[~2026-07-24 21:30 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-24 19:07 [PATCH bpf-next v2 00/18] Generate bpf_func_proto for kfunc Amery Hung
2026-07-24 19:07 ` [PATCH bpf-next v2 01/18] bpf: Drop process_timer_func wrappers Amery Hung
2026-07-24 19:07 ` [PATCH bpf-next v2 02/18] bpf: Unify const map ptr argument checking for helpers and kfuncs Amery Hung
2026-07-24 19:28 ` sashiko-bot
2026-07-24 20:49 ` Amery Hung
2026-07-24 21:29 ` Kumar Kartikeya Dwivedi [this message]
2026-07-24 19:07 ` [PATCH bpf-next v2 03/18] bpf: Split kfunc map argument into __const_map and __map Amery Hung
2026-07-24 19:07 ` [PATCH bpf-next v2 04/18] bpf: Pass kfunc meta to mem and mem_size check Amery Hung
2026-07-24 19:07 ` [PATCH bpf-next v2 05/18] bpf: Check helper and kfunc mem+size arguments identically Amery Hung
2026-07-24 19:08 ` [PATCH bpf-next v2 06/18] selftests/bpf: Add tests for helper and kfunc mem+size arguments Amery Hung
2026-07-24 19:25 ` sashiko-bot
2026-07-24 19:08 ` [PATCH bpf-next v2 07/18] bpf: Check fixed-size mem args of helpers and kfuncs the same way Amery Hung
2026-07-24 19:32 ` sashiko-bot
2026-07-24 20:39 ` Amery Hung
2026-07-24 19:08 ` [PATCH bpf-next v2 08/18] bpf: Express ARG_CONST_SIZE_OR_ZERO as ARG_CONST_SIZE | SCALAR_MAYBE_ZERO Amery Hung
2026-07-24 19:08 ` [PATCH bpf-next v2 09/18] bpf: Rename ARG_CONST_SIZE{,_OR_ZERO} to ARG_MEM_SIZE{,_OR_ZERO} Amery Hung
2026-07-24 19:08 ` [PATCH bpf-next v2 10/18] bpf: Fold __szk const size handling into the scalar arg path Amery Hung
2026-07-24 19:08 ` [PATCH bpf-next v2 11/18] bpf: Classify kfunc mem_size args from BTF without register state Amery Hung
2026-07-24 19:38 ` sashiko-bot
2026-07-24 22:52 ` Amery Hung
2026-07-24 19:08 ` [PATCH bpf-next v2 12/18] bpf: Handle NULL kfunc pointer args without a KF_ARG_PTR_TO_NULL type Amery Hung
2026-07-24 19:08 ` [PATCH bpf-next v2 13/18] bpf: Distinguish fixed- and variable-size kfunc mem args with MEM_FIXED_SIZE Amery Hung
2026-07-24 19:08 ` [PATCH bpf-next v2 14/18] bpf: Check helper mem+size in ARG_PTR_TO_MEM case Amery Hung
2026-07-24 19:47 ` sashiko-bot
2026-07-24 21:10 ` Amery Hung
2026-07-24 19:08 ` [PATCH bpf-next v2 15/18] bpf: Classify kfunc pointer arguments from BTF, resolve type against the register Amery Hung
2026-07-24 19:08 ` [PATCH bpf-next v2 16/18] bpf: Tag nullable kfunc pointer args with PTR_MAYBE_NULL Amery Hung
2026-07-24 19:38 ` sashiko-bot
2026-07-24 19:08 ` [PATCH bpf-next v2 17/18] bpf: Classify scalar kfunc arguments from BTF Amery Hung
2026-07-24 19:08 ` [PATCH bpf-next v2 18/18] bpf: Generate kfunc argument prototype at add-call time Amery Hung
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=DK74DPZIPH5I.2ZST2KB0Y63PY@gmail.com \
--to=memxor@gmail.com \
--cc=ameryhung@gmail.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox