From: sashiko-bot@kernel.org
To: "Xu Kuohai" <xukuohai@huaweicloud.com>, bpf@vger.kernel.org
Subject: Re: [PATCH bpf-next 13/16] bpftool: Emit the arena percpu datasec into skeleton
Date: Tue, 20 Oct 2026 14:01:41 +0000 [thread overview]
Message-ID: <sashiko-outbox-179076@kernel.org> (raw)
In-Reply-To: <a579251a284c3dd4954c305a04346acef4ec4113.1792503001.git.xukuohai@huawei.com>
Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
- [Medium] bpftool: NULL pointer dereference in do_skeleton() when BTF is absent
- [Low] bpftool: missing pointer cast in do_skeleton() breaks C++ skeleton build
--
commit 104a6169dc8cb31cbaeca548b8c48657b09d1a96
Author: Xu Kuohai <xukuohai@huawei.com>
bpftool: Emit the arena percpu datasec into skeleton
This commit updates bpftool skeleton generation to emit a separate
arena_percpu data section struct when .arena.percpu variables are present
and initializes obj->arena_percpu to cpu 0's per-cpu arena base in the
generated load function.
> diff --git a/tools/bpf/bpftool/gen.c b/tools/bpf/bpftool/gen.c
> index ee680f7c21160..8a321ec1155a1 100644
> --- a/tools/bpf/bpftool/gen.c
> +++ b/tools/bpf/bpftool/gen.c
[ ... ]
> @@ -1511,11 +1523,58 @@ static int do_skeleton(int argc, char **argv)
> return %1$s__open_opts(NULL); \n\
> } \n\
> \n\
> - static inline int \n\
> - %1$s__load(struct %1$s *obj) \n\
> - { \n\
> - return bpf_object__load_skeleton(obj->skeleton); \n\
> - } \n\
> + ",
> + obj_name
> + );
> +
> + /* The per-cpu arena data has no mmaped slot in the map skeleton.
> + * Point obj->arena_percpu at cpu 0's chunk once the object is
> + * loaded.
> + */
> + {
> + char arena_map_ident[256] = "";
> + bool have_percpu_arena = false;
> +
> + bpf_object__for_each_map(map, obj) {
> + if (bpf_map__type(map) != BPF_MAP_TYPE_ARENA)
> + continue;
> + if (find_type_for_map(bpf_object__btf(obj), "arena_percpu") &&
> + get_map_ident(map, arena_map_ident, sizeof(arena_map_ident))) {
[Severity: Medium]
Can this dereference a NULL btf pointer when generating a skeleton for an
object with an arena map but no BTF information?
Earlier in do_skeleton(), codegen_datasecs() is guarded by checking if btf
is non-NULL:
if (btf) {
err = codegen_datasecs(obj, obj_name);
if (err)
goto out;
}
Here, bpf_object__btf(obj) is passed directly to find_type_for_map()
without checking if btf is NULL:
do_skeleton()
find_type_for_map(bpf_object__btf(obj), "arena_percpu")
btf__type_cnt(btf)
return btf->start_id + btf->nr_types;
Should this check that btf is non-NULL before calling find_type_for_map()?
> + have_percpu_arena = true;
> + break;
> + }
> + }
> +
> + if (have_percpu_arena) {
> + codegen("\
> + \n\
> + static inline int \n\
> + %1$s__load(struct %1$s *obj) \n\
> + { \n\
> + int err; \n\
> + \n\
> + err = bpf_object__load_skeleton(obj->skeleton); \n\
> + if (err) \n\
> + return err; \n\
> + obj->arena_percpu = \n\
> + bpf_map__arena_percpu_base(obj->maps.%2$s); \n\
[Severity: Low]
Will this assignment fail to compile when the generated skeleton header is
included in C++ code?
bpf_map__arena_percpu_base() returns void *, while obj->arena_percpu is a
typed struct pointer (struct <obj_name>__arena_percpu *). In C++, implicit
conversion from void * to a typed pointer is not permitted.
Elsewhere in tools/bpf/bpftool/gen.c, such as in gen_st_ops_shadow_init(),
void * returns are cast using __typeof__:
obj->struct_ops.%1$s = (__typeof__(obj->struct_ops.%1$s))
bpf_map__initial_value(obj->maps.%1$s, NULL);
Should obj->arena_percpu also use a (__typeof__(obj->arena_percpu)) cast
here?
> + return 0; \n\
> + } \n\
> + ", obj_name, arena_map_ident);
[ ... ]
>
--
Sashiko AI review · https://sashiko.dev/#/patchset/cover.1792503001.git.xukuohai@huawei.com?part=13
next prev parent reply other threads:[~2026-10-20 14:01 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-20 13:22 [PATCH bpf-next 00/16] Add percpu variable support for bpf arena Xu Kuohai
2026-10-20 13:22 ` [PATCH bpf-next 01/16] libbpf: Collect arena percpu data section Xu Kuohai
2026-10-20 14:17 ` bot+bpf-ci
2026-10-20 13:22 ` [PATCH bpf-next 02/16] libbpf: Create arena percpu chunk from the arena percpu ELF section Xu Kuohai
2026-10-20 14:17 ` bot+bpf-ci
2026-10-20 13:22 ` [PATCH bpf-next 03/16] libbpf: Place the percpu chunks in the bpf arena Xu Kuohai
2026-10-20 13:22 ` [PATCH bpf-next 04/16] libbpf: Copy the percpu chunks into " Xu Kuohai
2026-10-20 14:17 ` bot+bpf-ci
2026-10-20 13:22 ` [PATCH bpf-next 05/16] libbpf: Add the arena percpu chunk attribute to map creation options Xu Kuohai
2026-10-20 14:04 ` sashiko-bot
2026-10-20 14:17 ` bot+bpf-ci
2026-10-20 13:22 ` [PATCH bpf-next 06/16] libbpf: Relocate arena percpu access instructions Xu Kuohai
2026-10-20 13:22 ` [PATCH bpf-next 07/16] libbpf: Add arena percpu feature probe Xu Kuohai
2026-10-20 14:17 ` bot+bpf-ci
2026-10-20 13:22 ` [PATCH bpf-next 08/16] bpf: Extend syscall to accept arena percpu information Xu Kuohai
2026-10-20 14:17 ` bot+bpf-ci
2026-10-20 13:22 ` [PATCH bpf-next 09/16] bpf: Teach verifier about arena percpu instructions Xu Kuohai
2026-10-20 14:16 ` sashiko-bot
2026-10-20 13:22 ` [PATCH bpf-next 10/16] bpf, x86: Add support for arena percpu Xu Kuohai
2026-10-20 14:12 ` sashiko-bot
2026-10-20 13:22 ` [PATCH bpf-next 11/16] bpf, arm64: " Xu Kuohai
2026-10-20 14:17 ` bot+bpf-ci
2026-10-20 13:22 ` [PATCH bpf-next 12/16] libbpf: Introduce arena percpu helpers for user space Xu Kuohai
2026-10-20 14:00 ` sashiko-bot
2026-10-20 14:17 ` bot+bpf-ci
2026-10-20 13:22 ` [PATCH bpf-next 13/16] bpftool: Emit the arena percpu datasec into skeleton Xu Kuohai
2026-10-20 14:01 ` sashiko-bot [this message]
2026-10-20 13:22 ` [PATCH bpf-next 14/16] selftests/bpf: Add test for arena percpu-only object Xu Kuohai
2026-10-20 14:12 ` sashiko-bot
2026-10-20 14:17 ` bot+bpf-ci
2026-10-20 13:23 ` [PATCH bpf-next 15/16] selftests/bpf: Add test for mixed arena percpu object Xu Kuohai
2026-10-20 13:57 ` sashiko-bot
2026-10-20 13:23 ` [PATCH bpf-next 16/16] selftests/bpf: Add test for arena percpu bounds Xu Kuohai
2026-10-20 14:17 ` bot+bpf-ci
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=sashiko-outbox-179076@kernel.org \
--to=sashiko-bot@kernel.org \
--cc=bpf@vger.kernel.org \
--cc=sashiko-reviews@lists.linux.dev \
--cc=xukuohai@huaweicloud.com \
/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