riscv, bpf: Fix potential NULL dereference
authorBjörn Töpel <bjorn@kernel.org>
Thu, 28 Oct 2021 12:51:15 +0000 (14:51 +0200)
committerJakub Kicinski <kuba@kernel.org>
Thu, 28 Oct 2021 15:14:30 +0000 (08:14 -0700)
The bpf_jit_binary_free() function requires a non-NULL argument. When
the RISC-V BPF JIT fails to converge in NR_JIT_ITERATIONS steps,
jit_data->header will be NULL, which triggers a NULL
dereference. Avoid this by checking the argument, prior calling the
function.

Fixes: ca6cb5447cec ("riscv, bpf: Factor common RISC-V JIT code")
Signed-off-by: Björn Töpel <bjorn@kernel.org>
Acked-by: Daniel Borkmann <daniel@iogearbox.net>
Link: https://lore.kernel.org/r/20211028125115.514587-1-bjorn@kernel.org
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
arch/riscv/net/bpf_jit_core.c

index 0fee2cbaaf533a2111c5a79d971e331bf4cfd1af..753d85bdfad07401580f27cf15edf4cb0dc1c3a5 100644 (file)
@@ -125,7 +125,8 @@ struct bpf_prog *bpf_int_jit_compile(struct bpf_prog *prog)
 
        if (i == NR_JIT_ITERATIONS) {
                pr_err("bpf-jit: image did not converge in <%d passes!\n", i);
-               bpf_jit_binary_free(jit_data->header);
+               if (jit_data->header)
+                       bpf_jit_binary_free(jit_data->header);
                prog = orig_prog;
                goto out_offset;
        }