From: David Vernet <void@manifault.com>
To: bpf@vger.kernel.org
Cc: ast@kernel.org, daniel@iogearbox.net, andrii@kernel.org,
martin.lau@linux.dev, song@kernel.org, yhs@meta.com,
john.fastabend@gmail.com, kpsingh@kernel.org, sdf@google.com,
haoluo@google.com, jolsa@kernel.org,
linux-kernel@vger.kernel.org, kernel-team@meta.com
Subject: [PATCH bpf-next 0/3] Annotate kfuncs with new __bpf_kfunc macro
Date: Fri, 6 Jan 2023 13:51:27 -0600 [thread overview]
Message-ID: <20230106195130.1216841-1-void@manifault.com> (raw)
BPF kfuncs are kernel functions that can be invoked by BPF programs.
kfuncs can be kernel functions which are also called elsewhere in the
main kernel (such as crash_kexec()), or may be functions that are only
meant to be used by BPF programs, such as bpf_task_acquire(), and which
are not called from anywhere else in the kernel.
While thus far we haven't observed any issues such as kfuncs being
elided by the compiler, at some point we could easily run into problems
such as the following:
- static kernel functions that are also used as kfuncs could be inlined
and/or elided by the compiler.
- BPF-specific kfuncs with external linkage may at some point be elided
by the compiler in LTO builds, when it's determined that they aren't
called anywhere.
To address this, this patch set introduces a new __bpf_kfunc macro which
should be added to all kfuncs, and which will protect kfuncs from such
problems. Note that some kfuncs kind of try to do this already by
specifying noinline or __used. We are inconsistent in how this is
applied. __bpf_kfunc should provide a uniform and more-future-proof way
to do this.
David Vernet (3):
bpf: Add __bpf_kfunc tag for marking kernel functions as kfuncs
bpf: Document usage of the new __bpf_kfunc macro
bpf: Add __bpf_kfunc tag to all kfuncs
Documentation/bpf/kfuncs.rst | 18 +++++
Documentation/conf.py | 3 +
include/linux/btf.h | 9 +++
kernel/bpf/helpers.c | 19 +++++
kernel/cgroup/rstat.c | 2 +
kernel/kexec_core.c | 2 +
kernel/trace/bpf_trace.c | 4 +
net/bpf/test_run.c | 76 ++++++++++++-------
net/ipv4/tcp_bbr.c | 8 ++
net/ipv4/tcp_cong.c | 5 ++
net/ipv4/tcp_cubic.c | 6 ++
net/ipv4/tcp_dctcp.c | 6 ++
net/netfilter/nf_conntrack_bpf.c | 14 +++-
net/netfilter/nf_nat_bpf.c | 1 +
net/xfrm/xfrm_interface_bpf.c | 4 +-
.../selftests/bpf/bpf_testmod/bpf_testmod.c | 2 +-
16 files changed, 146 insertions(+), 33 deletions(-)
--
2.39.0
next reply other threads:[~2023-01-06 19:52 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-01-06 19:51 David Vernet [this message]
2023-01-06 19:51 ` [PATCH bpf-next 1/3] bpf: Add __bpf_kfunc tag for marking kernel functions as kfuncs David Vernet
2023-01-07 1:04 ` Alexei Starovoitov
2023-01-07 2:09 ` David Vernet
2023-01-08 23:17 ` Alexei Starovoitov
2023-01-09 12:08 ` Kumar Kartikeya Dwivedi
2023-01-09 17:05 ` David Vernet
2023-01-10 2:21 ` Alexei Starovoitov
2023-01-06 19:51 ` [PATCH bpf-next 2/3] bpf: Document usage of the new __bpf_kfunc macro David Vernet
2023-01-06 19:51 ` [PATCH bpf-next 3/3] bpf: Add __bpf_kfunc tag to all kfuncs David Vernet
2023-01-07 0:47 ` [PATCH bpf-next 0/3] Annotate kfuncs with new __bpf_kfunc macro Stanislav Fomichev
2023-01-07 5:27 ` David Vernet
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=20230106195130.1216841-1-void@manifault.com \
--to=void@manifault.com \
--cc=andrii@kernel.org \
--cc=ast@kernel.org \
--cc=bpf@vger.kernel.org \
--cc=daniel@iogearbox.net \
--cc=haoluo@google.com \
--cc=john.fastabend@gmail.com \
--cc=jolsa@kernel.org \
--cc=kernel-team@meta.com \
--cc=kpsingh@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=martin.lau@linux.dev \
--cc=sdf@google.com \
--cc=song@kernel.org \
--cc=yhs@meta.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