]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
selftests/bpf: add subprog to BPF object file with no entry programs
authorAndrii Nakryiko <andrii@kernel.org>
Thu, 10 Oct 2024 21:17:31 +0000 (14:17 -0700)
committerAlexei Starovoitov <ast@kernel.org>
Fri, 11 Oct 2024 18:16:59 +0000 (11:16 -0700)
Add a subprogram to BPF object file that otherwise has no entry BPF
programs to validate that libbpf can still load this correctly.

Until this was fixed, user could expect this very confusing error message:

  libbpf: prog 'dangling_subprog': missing BPF prog type, check ELF section name '.text'
  libbpf: prog 'dangling_subprog': failed to load: -22
  libbpf: failed to load object 'struct_ops_detach'
  libbpf: failed to load BPF skeleton 'struct_ops_detach': -22

Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
Link: https://lore.kernel.org/r/20241010211731.4121837-2-andrii@kernel.org
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
tools/testing/selftests/bpf/progs/struct_ops_detach.c

index 56b787a8987610ffe776238801937890244f6184..d7fdcabe7d905a439ddfb15a42a92ca29511a706 100644 (file)
@@ -6,5 +6,17 @@
 
 char _license[] SEC("license") = "GPL";
 
+/*
+ * This subprogram validates that libbpf handles the situation in which BPF
+ * object has subprograms in .text section, but has no entry BPF programs.
+ * At some point that was causing issues due to legacy logic of treating such
+ * subprogram as entry program (with unknown program type, which would fail).
+ */
+int dangling_subprog(void)
+{
+       /* do nothing, just be here */
+       return 0;
+}
+
 SEC(".struct_ops.link")
 struct bpf_testmod_ops testmod_do_detach;