On Tue, Aug 31, 2021 at 9:58 AM Toke Høiland-Jørgensen <toke@xxxxxxxxxx> wrote: > > 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 <toke@xxxxxxxxxx> > --- > 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. But I'm also curious which Clang version is being used to cause no ELF symbols being generated? > progs = obj->programs; > nr_progs = obj->nr_programs; > nr_syms = symbols->d_size / sizeof(GElf_Sym); > -- > 2.33.0 >