]> git.proxmox.com Git - mirror_ubuntu-hirsute-kernel.git/commitdiff
bpftool: Don't crash on missing jited insns or ksyms
authorToke Høiland-Jørgensen <toke@redhat.com>
Tue, 10 Dec 2019 18:14:12 +0000 (19:14 +0100)
committerDaniel Borkmann <daniel@iogearbox.net>
Wed, 11 Dec 2019 12:57:26 +0000 (13:57 +0100)
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: 71bb428fe2c1 ("tools: bpf: add bpftool")
Fixes: f84192ee00b7 ("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
tools/bpf/bpftool/prog.c
tools/bpf/bpftool/xlated_dumper.c

index 4535c863d2cd9136ef542bd50883bd51f3fc5bba..2ce9c5ba1934767386c3a8ffe576d04b3eb3f466 100644 (file)
@@ -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;
                }
index 494d7ae3614dea003d2bd774917a3f27e4d119ca..5b91ee65a080260e857187a30b921687c1532ab4 100644 (file)
@@ -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);