From: sashiko-bot@kernel.org
To: "Amery Hung" <ameryhung@gmail.com>
Cc: bpf@vger.kernel.org
Subject: Re: [PATCH bpf-next v3 09/15] bpf: Add infrastructure to support attaching struct_ops to cgroups
Date: Mon, 06 Jul 2026 17:47:36 +0000 [thread overview]
Message-ID: <20260706174737.0C9CB1F000E9@smtp.kernel.org> (raw)
In-Reply-To: <20260706171918.317102-10-ameryhung@gmail.com>
Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
Pre-existing issues:
- [High] replace_effective_prog() computes a logical array index but uses it as a physical index, overwriting the wrong program.
--
commit d4dcc595e5c89fd20e4539f0b30d115f2408a4a8
Author: Martin KaFai Lau <martin.lau@kernel.org>
bpf: Add infrastructure to support attaching struct_ops to cgroups
This patch adds the necessary infrastructure to attach a struct_ops map to a
cgroup. It creates a consistent expectation for attaching struct_ops to
cgroups across subsystems by reusing the existing bpf_cgroup_link and
handling struct_ops maps similarly to traditional program links.
> diff --git a/kernel/bpf/cgroup.c b/kernel/bpf/cgroup.c
> index 081d81de18163..745e826c9f615 100644
> --- a/kernel/bpf/cgroup.c
> +++ b/kernel/bpf/cgroup.c
[ ... ]
> @@ -2820,6 +2897,270 @@ const struct bpf_verifier_ops cg_sockopt_verifier_ops = {
[ ... ]
> +static int cgroup_struct_ops_link_update(struct bpf_link *link, struct bpf_map *new_map,
> + struct bpf_map *expected_old_map)
> +{
[ ... ]
> + bpf_map_inc(new_map);
> + WRITE_ONCE(cg_link->map, new_map);
> + replace_effective_prog(cgrp, atype, pl);
[Severity: High]
This is a pre-existing issue, but does replace_effective_prog() risk
overwriting the wrong program in the physical items array?
In replace_effective_prog(), effective_prog_pos() returns a logical array
index based on the current hlist length, which is then used directly as a
physical index into the progs->items[] array:
kernel/bpf/cgroup.c:replace_effective_prog() {
...
pos = effective_prog_pos(desc, atype, pl);
...
item = &progs->items[pos];
prog_list_replace_item(pl, item);
}
If a detach operation falls back to purge_effective_progs() (e.g., due to a
memory allocation failure in update_effective_progs()), it marks the detached
program's entry as a dummy without shifting elements, and removes it from
the hlist.
If another program is subsequently updated via BPF_PROG_ATTACH with
BPF_F_REPLACE, effective_prog_pos() calculates the target's logical index
based on the new, shorter hlist.
Using this logical index on the physical array could point to the dummy
element instead of the target program's actual slot.
Would this cause the update to overwrite the dummy, leaving both the new and
original programs to execute?
Should replace_effective_prog() skip dummy elements when indexing the
physical array to align the logical index with the physical position?
> + bpf_map_put(old_map);
> + cgrp->bpf.revisions[atype]++;
> +
> +out:
> + cgroup_unlock();
> + return err;
> +}
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260706171918.317102-1-ameryhung@gmail.com?part=9
next prev parent reply other threads:[~2026-07-06 17:47 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-06 17:19 [PATCH bpf-next v3 00/15] bpf: A common way to attach struct_ops to a cgroup Amery Hung
2026-07-06 17:19 ` [PATCH bpf-next v3 01/15] bpf: Remove __rcu tagging in st_link->map Amery Hung
2026-07-06 17:19 ` [PATCH bpf-next v3 02/15] bpf: Make struct_ops tasks_rcu grace period optional Amery Hung
2026-07-06 17:44 ` sashiko-bot
2026-07-06 17:19 ` [PATCH bpf-next v3 03/15] bpf: Add bpf_struct_ops accessor helpers Amery Hung
2026-07-06 17:34 ` sashiko-bot
2026-07-06 18:16 ` Amery Hung
2026-07-06 17:19 ` [PATCH bpf-next v3 04/15] bpf: Remove unnecessary prog_list_prog() check Amery Hung
2026-07-06 17:19 ` [PATCH bpf-next v3 05/15] bpf: Replace prog_list_prog() check with direct pl->prog and pl->link check Amery Hung
2026-07-06 17:19 ` [PATCH bpf-next v3 06/15] bpf: Add prog_list_init_item(), prog_list_replace_item(), and prog_list_id() Amery Hung
2026-07-06 17:19 ` [PATCH bpf-next v3 07/15] bpf: Move LSM trampoline unlink into bpf_cgroup_link_auto_detach() Amery Hung
2026-07-06 17:19 ` [PATCH bpf-next v3 08/15] bpf: Add a few bpf_cgroup_array_* helper functions Amery Hung
2026-07-06 17:19 ` [PATCH bpf-next v3 09/15] bpf: Add infrastructure to support attaching struct_ops to cgroups Amery Hung
2026-07-06 17:47 ` sashiko-bot [this message]
2026-07-06 17:19 ` [PATCH bpf-next v3 10/15] bpf: Allow all struct_ops to use bpf_dynptr_from_skb() Amery Hung
2026-07-06 17:19 ` [PATCH bpf-next v3 11/15] bpf: tcp: Support selected sock_ops callbacks as struct_ops Amery Hung
2026-07-06 18:28 ` bot+bpf-ci
2026-07-06 23:11 ` Amery Hung
2026-07-06 17:19 ` [PATCH bpf-next v3 12/15] bpf: tcp: Support parse/len/write header option hooks in bpf_tcp_ops Amery Hung
2026-07-06 17:45 ` sashiko-bot
2026-07-06 22:31 ` Amery Hung
2026-07-06 17:19 ` [PATCH bpf-next v3 13/15] libbpf: Support attaching struct_ops to a cgroup Amery Hung
2026-07-06 17:19 ` [PATCH bpf-next v3 14/15] selftests/bpf: Test " Amery Hung
2026-07-06 17:19 ` [PATCH bpf-next v3 15/15] selftests/bpf: Add test for bpf_tcp_ops header option hooks Amery Hung
2026-07-06 17:47 ` sashiko-bot
2026-07-06 18:18 ` 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=20260706174737.0C9CB1F000E9@smtp.kernel.org \
--to=sashiko-bot@kernel.org \
--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