diff options
author | Daniel Borkmann <daniel@iogearbox.net> | 2019-10-23 00:30:38 +0300 |
---|---|---|
committer | Alexei Starovoitov <ast@kernel.org> | 2019-10-23 07:59:49 +0300 |
commit | 3b4d9eb2ee74dd5ea7fa36cffb0ca7f5bc4924da (patch) | |
tree | 607611b86e1c20fa53a090e13a279e5bcfcd850d /net/9p/trans_fd.c | |
parent | cd7455f1013ef96d5cbf5c05d2b7c06f273810a6 (diff) | |
download | linux-3b4d9eb2ee74dd5ea7fa36cffb0ca7f5bc4924da.tar.xz |
bpf: Fix use after free in bpf_get_prog_name
There is one more problematic case I noticed while recently fixing BPF kallsyms
handling in cd7455f1013e ("bpf: Fix use after free in subprog's jited symbol
removal") and that is bpf_get_prog_name().
If BTF has been attached to the prog, then we may be able to fetch the function
signature type id in kallsyms through prog->aux->func_info[prog->aux->func_idx].type_id.
However, while the BTF object itself is torn down via RCU callback, the prog's
aux->func_info is immediately freed via kvfree(prog->aux->func_info) once the
prog's refcount either hit zero or when subprograms were already exposed via
kallsyms and we hit the error path added in 5482e9a93c83 ("bpf: Fix memleak in
aux->func_info and aux->btf").
This violates RCU as well since kallsyms could be walked in parallel where we
could access aux->func_info. Hence, defer kvfree() to after RCU grace period.
Looking at ba64e7d85252 ("bpf: btf: support proper non-jit func info") there
is no reason/dependency where we couldn't defer the kvfree(aux->func_info) into
the RCU callback.
Fixes: 5482e9a93c83 ("bpf: Fix memleak in aux->func_info and aux->btf")
Fixes: ba64e7d85252 ("bpf: btf: support proper non-jit func info")
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Acked-by: Yonghong Song <yhs@fb.com>
Cc: Martin KaFai Lau <kafai@fb.com>
Link: https://lore.kernel.org/bpf/875f2906a7c1a0691f2d567b4d8e4ea2739b1e88.1571779205.git.daniel@iogearbox.net
Diffstat (limited to 'net/9p/trans_fd.c')
0 files changed, 0 insertions, 0 deletions