forked from Minki/linux
bpftool: Don't crash on missing jited insns or ksyms
When the kptr_restrict sysctl is set, the kernel can fail to return jited_ksyms or jited_prog_insns, but still have positive values in nr_jited_ksyms and jited_prog_len. This causes bpftool to crash when trying to dump the program because it only checks the len fields not the actual pointers to the instructions and ksyms. Fix this by adding the missing checks. Fixes:71bb428fe2
("tools: bpf: add bpftool") Fixes:f84192ee00
("tools: bpftool: resolve calls without using imm field") Signed-off-by: Toke Høiland-Jørgensen <toke@redhat.com> Signed-off-by: Daniel Borkmann <daniel@iogearbox.net> Acked-by: Martin KaFai Lau <kafai@fb.com> Link: https://lore.kernel.org/bpf/20191210181412.151226-1-toke@redhat.com
This commit is contained in:
parent
4c80c7bc58
commit
5b79bcdf03
@ -493,7 +493,7 @@ static int do_dump(int argc, char **argv)
|
||||
|
||||
info = &info_linear->info;
|
||||
if (mode == DUMP_JITED) {
|
||||
if (info->jited_prog_len == 0) {
|
||||
if (info->jited_prog_len == 0 || !info->jited_prog_insns) {
|
||||
p_info("no instructions returned");
|
||||
goto err_free;
|
||||
}
|
||||
|
@ -174,7 +174,7 @@ static const char *print_call(void *private_data,
|
||||
struct kernel_sym *sym;
|
||||
|
||||
if (insn->src_reg == BPF_PSEUDO_CALL &&
|
||||
(__u32) insn->imm < dd->nr_jited_ksyms)
|
||||
(__u32) insn->imm < dd->nr_jited_ksyms && dd->jited_ksyms)
|
||||
address = dd->jited_ksyms[insn->imm];
|
||||
|
||||
sym = kernel_syms_search(dd, address);
|
||||
|
Loading…
Reference in New Issue
Block a user