mbox series

[bpf,v2,0/3] Fix caching of BTF for kfuncs in the verifier

Message ID 20241010-fix-kfunc-btf-caching-for-modules-v2-0-745af6c1af98@redhat.com (mailing list archive)
Headers show
Series Fix caching of BTF for kfuncs in the verifier | expand

Message

Toke Høiland-Jørgensen Oct. 10, 2024, 1:27 p.m. UTC
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 middle commit is a small refactor to
expose the module loading helper functions in testing_helpers.c. See the
individual patch descriptions for more details.

---
Changes in v2:
- Drop patch that refactors module building in selftests (Alexei)
- Get rid of expect_val function argument in selftest (Jiri)
- Collect ACKs
- Link to v1: https://lore.kernel.org/r/20241008-fix-kfunc-btf-caching-for-modules-v1-0-dfefd9aa4318@redhat.com

---
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 (1):
      bpf: fix kfunc btf caching for modules

 kernel/bpf/verifier.c                              |  8 +++-
 tools/testing/selftests/bpf/Makefile               | 20 +++++++-
 .../selftests/bpf/bpf_test_modorder_x/Makefile     | 19 ++++++++
 .../bpf/bpf_test_modorder_x/bpf_test_modorder_x.c  | 39 +++++++++++++++
 .../selftests/bpf/bpf_test_modorder_y/Makefile     | 19 ++++++++
 .../bpf/bpf_test_modorder_y/bpf_test_modorder_y.c  | 39 +++++++++++++++
 .../selftests/bpf/prog_tests/kfunc_module_order.c  | 55 ++++++++++++++++++++++
 .../selftests/bpf/progs/kfunc_module_order.c       | 30 ++++++++++++
 tools/testing/selftests/bpf/testing_helpers.c      | 34 ++++++++-----
 tools/testing/selftests/bpf/testing_helpers.h      |  2 +
 10 files changed, 251 insertions(+), 14 deletions(-)
---
base-commit: 60f802e2d6e10df609a80962b13558b7455ab32b
change-id: 20241008-fix-kfunc-btf-caching-for-modules-b62603484ffb

Best regards,

Comments

patchwork-bot+netdevbpf@kernel.org Oct. 10, 2024, 6 p.m. UTC | #1
Hello:

This series was applied to bpf/bpf.git (master)
by Alexei Starovoitov <ast@kernel.org>:

On Thu, 10 Oct 2024 15:27:06 +0200 you wrote:
> 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.
> 
> [...]

Here is the summary with links:
  - [bpf,v2,1/3] bpf: fix kfunc btf caching for modules
    https://git.kernel.org/bpf/bpf/c/6cb86a0fdece
  - [bpf,v2,2/3] selftests/bpf: Provide a generic [un]load_module helper
    https://git.kernel.org/bpf/bpf/c/4192bb294f80
  - [bpf,v2,3/3] selftests/bpf: Add test for kfunc module order
    https://git.kernel.org/bpf/bpf/c/f91b256644ea

You are awesome, thank you!