From: "Toke Høiland-Jørgensen" <toke@redhat.com>
To: Alexei Starovoitov <ast@kernel.org>,
Daniel Borkmann <daniel@iogearbox.net>,
John Fastabend <john.fastabend@gmail.com>,
Andrii Nakryiko <andrii@kernel.org>,
Martin KaFai Lau <martin.lau@linux.dev>,
Eduard Zingerman <eddyz87@gmail.com>, Song Liu <song@kernel.org>,
Yonghong Song <yonghong.song@linux.dev>,
KP Singh <kpsingh@kernel.org>,
Stanislav Fomichev <sdf@fomichev.me>,
Hao Luo <haoluo@google.com>, Jiri Olsa <jolsa@kernel.org>,
Kumar Kartikeya Dwivedi <memxor@gmail.com>
Cc: "Simon Sundberg" <simon.sundberg@kau.se>,
bpf@vger.kernel.org, netdev@vger.kernel.org,
"Toke Høiland-Jørgensen" <toke@redhat.com>
Subject: [PATCH bpf 0/4] Fix caching of BTF for kfuncs in the verifier
Date: Tue, 08 Oct 2024 12:35:15 +0200 [thread overview]
Message-ID: <20241008-fix-kfunc-btf-caching-for-modules-v1-0-dfefd9aa4318@redhat.com> (raw)
When playing around with defining kfuncs in some custom modules, we
noticed that if a BPF program calls two functions with the same
signature in two different modules, the function from the wrong module
may sometimes end up being called. Whether this happens depends on the
order of the calls in the BPF program, which turns out to be due to the
use of sort() inside __find_kfunc_desc_btf() in the verifier code.
This series contains a fix for the issue (first patch), and a selftest
to trigger it (last patch). The two middle commits refactor some of the
selftest code to better handle building and loading multiple kernel
modules as part of the testing. See the individual patch descriptions
for more details.
---
Simon Sundberg (2):
selftests/bpf: Provide a generic [un]load_module helper
selftests/bpf: Add test for kfunc module order
Toke Høiland-Jørgensen (2):
bpf: fix kfunc btf caching for modules
selftests/bpf: Consolidate kernel modules into common directory
kernel/bpf/verifier.c | 8 +++-
tools/testing/selftests/bpf/Makefile | 35 +++++++-------
.../testing/selftests/bpf/bpf_test_no_cfi/Makefile | 19 --------
tools/testing/selftests/bpf/bpf_testmod/Makefile | 20 --------
.../testing/selftests/bpf/prog_tests/core_reloc.c | 2 +-
.../selftests/bpf/prog_tests/kfunc_module_order.c | 55 ++++++++++++++++++++++
tools/testing/selftests/bpf/progs/bad_struct_ops.c | 2 +-
tools/testing/selftests/bpf/progs/cb_refs.c | 2 +-
tools/testing/selftests/bpf/progs/epilogue_exit.c | 4 +-
.../selftests/bpf/progs/epilogue_tailcall.c | 4 +-
tools/testing/selftests/bpf/progs/iters_testmod.c | 2 +-
tools/testing/selftests/bpf/progs/jit_probe_mem.c | 2 +-
.../selftests/bpf/progs/kfunc_call_destructive.c | 2 +-
.../testing/selftests/bpf/progs/kfunc_call_fail.c | 2 +-
.../testing/selftests/bpf/progs/kfunc_call_race.c | 2 +-
.../testing/selftests/bpf/progs/kfunc_call_test.c | 2 +-
.../selftests/bpf/progs/kfunc_call_test_subprog.c | 2 +-
.../selftests/bpf/progs/kfunc_module_order.c | 30 ++++++++++++
.../testing/selftests/bpf/progs/local_kptr_stash.c | 2 +-
tools/testing/selftests/bpf/progs/map_kptr.c | 2 +-
tools/testing/selftests/bpf/progs/map_kptr_fail.c | 2 +-
tools/testing/selftests/bpf/progs/missed_kprobe.c | 2 +-
.../selftests/bpf/progs/missed_kprobe_recursion.c | 2 +-
tools/testing/selftests/bpf/progs/nested_acquire.c | 2 +-
tools/testing/selftests/bpf/progs/pro_epilogue.c | 4 +-
.../selftests/bpf/progs/pro_epilogue_goto_start.c | 4 +-
tools/testing/selftests/bpf/progs/sock_addr_kern.c | 2 +-
.../selftests/bpf/progs/struct_ops_detach.c | 2 +-
.../selftests/bpf/progs/struct_ops_forgotten_cb.c | 2 +-
.../selftests/bpf/progs/struct_ops_maybe_null.c | 2 +-
.../bpf/progs/struct_ops_maybe_null_fail.c | 2 +-
.../selftests/bpf/progs/struct_ops_module.c | 2 +-
.../selftests/bpf/progs/struct_ops_multi_pages.c | 2 +-
.../selftests/bpf/progs/struct_ops_nulled_out_cb.c | 2 +-
.../bpf/progs/test_kfunc_param_nullable.c | 2 +-
.../selftests/bpf/progs/test_module_attach.c | 2 +-
.../selftests/bpf/progs/test_tp_btf_nullable.c | 2 +-
.../testing/selftests/bpf/progs/unsupported_ops.c | 2 +-
tools/testing/selftests/bpf/progs/wq.c | 2 +-
tools/testing/selftests/bpf/progs/wq_failures.c | 2 +-
.../bpf/{bpf_testmod => test_kmods}/.gitignore | 0
tools/testing/selftests/bpf/test_kmods/Makefile | 26 ++++++++++
.../selftests/bpf/test_kmods/bpf_test_modorder_x.c | 39 +++++++++++++++
.../selftests/bpf/test_kmods/bpf_test_modorder_y.c | 39 +++++++++++++++
.../bpf_test_no_cfi.c | 0
.../bpf_testmod-events.h | 0
.../bpf/{bpf_testmod => test_kmods}/bpf_testmod.c | 0
.../bpf/{bpf_testmod => test_kmods}/bpf_testmod.h | 0
.../bpf_testmod_kfunc.h | 0
tools/testing/selftests/bpf/testing_helpers.c | 34 ++++++++-----
tools/testing/selftests/bpf/testing_helpers.h | 2 +
51 files changed, 275 insertions(+), 108 deletions(-)
---
base-commit: bcd28cfd04ebd3f871443e4746e511147686e517
change-id: 20241008-fix-kfunc-btf-caching-for-modules-b62603484ffb
Best regards,
--
Toke Høiland-Jørgensen <toke@redhat.com>
next reply other threads:[~2024-10-08 10:35 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-10-08 10:35 Toke Høiland-Jørgensen [this message]
2024-10-08 10:35 ` [PATCH bpf 1/4] bpf: fix kfunc btf caching for modules Toke Høiland-Jørgensen
2024-10-08 17:46 ` Jiri Olsa
2024-10-09 1:43 ` Kumar Kartikeya Dwivedi
2024-10-08 10:35 ` [PATCH bpf 2/4] selftests/bpf: Consolidate kernel modules into common directory Toke Høiland-Jørgensen
2024-10-08 17:46 ` Jiri Olsa
2024-10-08 17:55 ` Toke Høiland-Jørgensen
2024-10-08 18:18 ` Jiri Olsa
2024-10-08 18:23 ` Toke Høiland-Jørgensen
2024-10-09 2:08 ` Alexei Starovoitov
2024-10-09 7:39 ` Toke Høiland-Jørgensen
2024-10-09 23:36 ` Alexei Starovoitov
2024-10-10 8:59 ` Toke Høiland-Jørgensen
2024-10-08 10:35 ` [PATCH bpf 3/4] selftests/bpf: Provide a generic [un]load_module helper Toke Høiland-Jørgensen
2024-10-08 17:54 ` Jiri Olsa
2024-10-09 1:44 ` Kumar Kartikeya Dwivedi
2024-10-08 10:35 ` [PATCH bpf 4/4] selftests/bpf: Add test for kfunc module order Toke Høiland-Jørgensen
2024-10-08 17:46 ` Jiri Olsa
2024-10-08 18:05 ` Toke Høiland-Jørgensen
2024-10-09 2:09 ` Kumar Kartikeya Dwivedi
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=20241008-fix-kfunc-btf-caching-for-modules-v1-0-dfefd9aa4318@redhat.com \
--to=toke@redhat.com \
--cc=andrii@kernel.org \
--cc=ast@kernel.org \
--cc=bpf@vger.kernel.org \
--cc=daniel@iogearbox.net \
--cc=eddyz87@gmail.com \
--cc=haoluo@google.com \
--cc=john.fastabend@gmail.com \
--cc=jolsa@kernel.org \
--cc=kpsingh@kernel.org \
--cc=martin.lau@linux.dev \
--cc=memxor@gmail.com \
--cc=netdev@vger.kernel.org \
--cc=sdf@fomichev.me \
--cc=simon.sundberg@kau.se \
--cc=song@kernel.org \
--cc=yonghong.song@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;
as well as URLs for NNTP newsgroup(s).