Re: [PATCH bpf] libbpf: don't crash on object files with no symbol tables
flat view
From: Toke Høiland-Jørgensen <hidden>
Date: 2021-09-01 10:19:19
Also in:
bpf
Andrii Nakryiko [off-list ref] writes:
On Tue, Aug 31, 2021 at 9:58 AM Toke Høiland-Jørgensen [off-list ref] wrote:quoted
If libbpf encounters an ELF file that has been stripped of its symbol table, it will crash in bpf_object__add_programs() when trying to dereference the obj->efile.symbols pointer. Add a check and return to avoid this. Fixes: 6245947c1b3c ("libbpf: Allow gaps in BPF program sections to support overriden weak functions") Signed-off-by: Toke Høiland-Jørgensen <redacted> --- tools/lib/bpf/libbpf.c | 3 +++ 1 file changed, 3 insertions(+)diff --git a/tools/lib/bpf/libbpf.c b/tools/lib/bpf/libbpf.c index 6f5e2757bb3c..4cd102affeef 100644 --- a/tools/lib/bpf/libbpf.c +++ b/tools/lib/bpf/libbpf.c@@ -668,6 +668,9 @@ bpf_object__add_programs(struct bpf_object *obj, Elf_Data *sec_data, const char *name; GElf_Sym sym; + if (!symbols) + return -ENOENT; +The more logical place to do this check is in bpf_object__elf_collect(). Can you add this there? We can also include helpful error message.
Sure, can do.
But I'm also curious which Clang version is being used to cause no ELF symbols being generated?
It's not Clang. I was debugging an issue with 'strip' mangling BPF object files and ran into this after trying to load an object file that had been run through a full 'strip bpf_object.o' (whereas 'strip -g bpf_object.o' works fine, except for that one bug I'm looking at). -Toke