From: Yonghong Song <yhs@fb.com>
To: <bpf@vger.kernel.org>
Cc: Alexei Starovoitov <ast@kernel.org>,
Andrii Nakryiko <andrii@kernel.org>,
Daniel Borkmann <daniel@iogearbox.net>,
John Fastabend <john.fastabend@gmail.com>, <kernel-team@fb.com>,
Martin KaFai Lau <martin.lau@kernel.org>,
Namhyung Kim <namhyung@kernel.org>
Subject: [RFC PATCH bpf-next 0/3] bpf: Implement bpf_get_kern_btf_id() kfunc
Date: Mon, 14 Nov 2022 08:23:28 -0800 [thread overview]
Message-ID: <20221114162328.622665-1-yhs@fb.com> (raw)
Currenty, a non-tracing bpf program typically has a single 'context' argument
with predefined uapi struct type. Following these uapi struct, user is able
to access other fields defined in uapi header. Inside the kernel, the
user-seen 'context' argument is replaced with 'kernel context' (or 'kcontext'
in short) which can access more information than what uapi header provides.
To access other info not in uapi header, people typically do two things:
(1). extend uapi to access more fields rooted from 'context'.
(2). use bpf_probe_read_kernl() helper to read particular field based on
kcontext.
Using (1) needs uapi change and using (2) makes code more complex since
direct memory access is not allowed.
There are already a few instances trying to access more information from
kcontext:
(1). trying to access some fields from perf_event kcontext.
(2). trying to access some fields from xdp kcontext.
This patch set tried to allow direct memory access for kcontext fields
by introducing bpf_get_kern_btf_id() kfunc.
Martin mentioned a use case like type casting below:
#define skb_shinfo(SKB) ((struct skb_shared_info *)(skb_end_pointer(SKB)))
basically a 'unsigned char *" casted to 'struct skb_shared_info *'. This patch
set tries to support such a use case as well with bpf_get_kern_btf_id().
For the patch series, Patch 1 is a preparation patch. Patch 2 did some
but incomplete implementation. Please see details in Patch 2 for what
is missing. The goal of this RFC patch is to seek comments about whether
such a kfunc is helpful and what scope (e.g., type casting like skb_shinfo(SKB)
can be implemented with this helper) it should cover. Patch 3 has two
simple tests.
[1] https://lore.kernel.org/bpf/ad15b398-9069-4a0e-48cb-4bb651ec3088@meta.com/
[2] https://lore.kernel.org/bpf/20221109215242.1279993-1-john.fastabend@gmail.com/
Yonghong Song (3):
bpf: Add support for kfunc set with generic btf_ids
bpf: Implement bpf_get_kern_btf_id() kfunc
bpf: Add bpf_get_kern_btf_id() tests
include/linux/bpf.h | 2 +
kernel/bpf/btf.c | 75 ++++++++++++++++-
kernel/bpf/helpers.c | 18 ++++-
kernel/bpf/verifier.c | 8 +-
.../bpf/prog_tests/get_kern_btf_id.c | 81 +++++++++++++++++++
.../selftests/bpf/progs/get_kern_btf_id.c | 44 ++++++++++
6 files changed, 225 insertions(+), 3 deletions(-)
create mode 100644 tools/testing/selftests/bpf/prog_tests/get_kern_btf_id.c
create mode 100644 tools/testing/selftests/bpf/progs/get_kern_btf_id.c
--
2.30.2
next reply other threads:[~2022-11-14 16:23 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-11-14 16:23 Yonghong Song [this message]
2022-11-14 16:23 ` [RFC PATCH bpf-next 1/3] bpf: Add support for kfunc set with generic btf_ids Yonghong Song
2022-11-14 16:23 ` [RFC PATCH bpf-next 2/3] bpf: Implement bpf_get_kern_btf_id() kfunc Yonghong Song
2022-11-15 19:43 ` Alexei Starovoitov
2022-11-15 20:05 ` Kumar Kartikeya Dwivedi
2022-11-15 20:26 ` Yonghong Song
2022-11-17 18:24 ` Kumar Kartikeya Dwivedi
2022-11-17 22:52 ` Yonghong Song
2022-11-17 23:01 ` Kumar Kartikeya Dwivedi
2022-11-17 23:13 ` Yonghong Song
2022-11-14 16:23 ` [RFC PATCH bpf-next 3/3] bpf: Add bpf_get_kern_btf_id() tests Yonghong Song
2022-11-15 16:30 ` [RFC PATCH bpf-next 0/3] bpf: Implement bpf_get_kern_btf_id() kfunc Toke Høiland-Jørgensen
2022-11-15 19:53 ` Yonghong Song
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=20221114162328.622665-1-yhs@fb.com \
--to=yhs@fb.com \
--cc=andrii@kernel.org \
--cc=ast@kernel.org \
--cc=bpf@vger.kernel.org \
--cc=daniel@iogearbox.net \
--cc=john.fastabend@gmail.com \
--cc=kernel-team@fb.com \
--cc=martin.lau@kernel.org \
--cc=namhyung@kernel.org \
/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