Message ID | 20220316132338.3226871-1-kkourt@kkourt.io (mailing list archive) |
---|---|
State | Not Applicable |
Delegated to: | BPF |
Headers | show |
Series | [1/2] pahole: avoid segfault when parsing bogus file | expand |
Context | Check | Description |
---|---|---|
bpf/vmtest-bpf-PR | fail | merge-conflict |
netdev/tree_selection | success | Not a local patch |
kkourt@ wrote: > From: Kornilios Kourtis <kornilios@isovalent.com> > > When trying to use btf encoding for an apparently problematic kernel > file, pahole segfaults. As can be seen below [1], the problem is that we > are trying to dereference a NULL decoder. > > Fix this by checking the return value of dwfl_getmodules which [2] whill > return -1 on errors or an offset if one of the modules did not return > DWARF_CB_OK. (In this specific case, it was __cus__load_debug_types that > returned DWARF_CB_ABORT.) > [...] > [2] https://sourceware.org/git/?p=elfutils.git;a=blob;f=libdwfl/libdwfl.h;h=f98f1d525d94bc7bcfc7c816890de5907ee4bd6d;hb=HEAD#l200 Thanks for the reference and fix. Acked-by: John Fastabend <john.fastabend@gmail.com>
diff --git a/dwarf_loader.c b/dwarf_loader.c index 151bc83..c87378b 100644 --- a/dwarf_loader.c +++ b/dwarf_loader.c @@ -3268,7 +3268,10 @@ static int cus__process_file(struct cus *cus, struct conf_load *conf, int fd, }; /* Process the one or more modules gleaned from this file. */ - dwfl_getmodules(dwfl, cus__process_dwflmod, &parms, 0); + int err = dwfl_getmodules(dwfl, cus__process_dwflmod, &parms, 0); + if (err) { + return -1; + } // We can't call dwfl_end(dwfl) here, as we keep pointers to strings // allocated by libdw that will be freed at dwfl_end(), so leave this for