Fix yet another case of mishandling SEC("struct_ops") programs that were nulled out programmatically through BPF skeleton by the user. While at it, add some improvements around detecting and reporting errors, specifically a common case of declaring SEC("struct_ops") program, but forgetting to actually make use of it by setting it as a callback implementation in SEC(".struct_ops") variable (i.e., map) declaration. A bunch of new selftests are added as well. Andrii Nakryiko (7): libbpf: remove unnecessary struct_ops prog validity check libbpf: handle yet another corner case of nulling out struct_ops program selftests/bpf: add another struct_ops callback use case test libbpf: fix libbpf_strerror_r() handling unknown errors libbpf: improve early detection of doomed-to-fail BPF program loading selftests/bpf: validate struct_ops early failure detection logic selftests/bpf: shorten subtest names for struct_ops_module test tools/lib/bpf/libbpf.c | 38 ++++++--- tools/lib/bpf/str_error.c | 16 +++- .../bpf/prog_tests/test_struct_ops_module.c | 78 ++++++++++++++++++- .../bpf/progs/struct_ops_forgotten_cb.c | 19 +++++ .../bpf/progs/struct_ops_nulled_out_cb.c | 22 ++++++ 5 files changed, 156 insertions(+), 17 deletions(-) create mode 100644 tools/testing/selftests/bpf/progs/struct_ops_forgotten_cb.c create mode 100644 tools/testing/selftests/bpf/progs/struct_ops_nulled_out_cb.c -- 2.43.0