When a kernel module exports a symbol with the same name as an existing
vmlinux symbol, kprobe attachment fails with -EADDRNOTAVAIL because
number_of_same_symbols() counts matches across both vmlinux and all
loaded modules, returning a count greater than 1.
This series takes a different approach from v1-v4, which implemented a
libbpf-side fallback parsing /proc/kallsyms and retrying with the
absolute address. That approach was rejected (Andrii Nakryiko, Ihor
Solodrai) because ambiguous symbol resolution does not belong in libbpf,
and because it did not cover the kprobe_multi path.
Following Ihor's suggestion, this series fixes the root cause in the
kernel: when an unqualified symbol name is given and the symbol is found
in vmlinux, prefer the vmlinux symbol and do not scan loaded modules.
This makes the skeleton auto-attach path work transparently with no
libbpf changes needed.
Patch 1: Kernel fix - return vmlinux-only count from
number_of_same_symbols() when the symbol is found in vmlinux,
preventing module shadows from causing -EADDRNOTAVAIL.
Patch 2: Selftests with bpf_testmod_dup_sym.ko test module validating
kprobe attachment across all four attach modes with a duplicate
symbol present. Unchaged from V4.
Changes since v4 [1]:
- Completely rework the approach: move fix from libbpf to the kernel
(number_of_same_symbols() in trace_kprobe.c) as suggested by Ihor
Solodrai. No libbpf changes needed.
- When mod==NULL and vmlinux contains the symbol (count > 0), return
the vmlinux-only count immediately, skipping module scan entirely.
- Preserves all existing semantics: MOD:SYM qualification unchanged,
module-only symbols unchanged, vmlinux-ambiguous symbols unchanged.
[1]
https://lore.kernel.org/bpf/[email protected]/
Andrey Grodzovsky (2):
tracing: Prefer vmlinux symbols over module symbols for unqualified
kprobes
selftests/bpf: Add tests for duplicate kprobe symbol handling
kernel/trace/trace_kprobe.c | 7 +++
tools/testing/selftests/bpf/Makefile | 2 +-
.../selftests/bpf/prog_tests/attach_probe.c | 63 +++++++++++++++++++
.../testing/selftests/bpf/test_kmods/Makefile | 2 +-
.../bpf/test_kmods/bpf_testmod_dup_sym.c | 48 ++++++++++++++
5 files changed, 120 insertions(+), 2 deletions(-)
create mode 100644 tools/testing/selftests/bpf/test_kmods/bpf_testmod_dup_sym.c
--
2.34.1