diff options
author | Daniel T. Lee <danieltimlee@gmail.com> | 2020-04-10 11:06:12 +0900 |
---|---|---|
committer | Daniel Borkmann <daniel@iogearbox.net> | 2020-04-14 21:33:53 +0200 |
commit | 96b2eb6e77959b4b52f80e7a61d03db77606aac6 (patch) | |
tree | 4b2925662cb05bc2667f432372bcbc02956b0439 /tools | |
parent | 642c1654702731ab42a3be771bebbd6ef938f0dc (diff) | |
download | linux-96b2eb6e77959b4b52f80e7a61d03db77606aac6.tar.bz2 |
tools, bpftool: Fix struct_ops command invalid pointer free
In commit 65c93628599d ("bpftool: Add struct_ops support") a new
type of command named struct_ops has been added. This command requires
a kernel with CONFIG_DEBUG_INFO_BTF=y set and for retrieving BTF info
in bpftool, the helper get_btf_vmlinux() is used.
When running this command on kernel without BTF debug info, this will
lead to 'btf_vmlinux' variable being an invalid(error) pointer. And by
this, btf_free() causes a segfault when executing 'bpftool struct_ops'.
This commit adds pointer validation with IS_ERR not to free invalid
pointer, and this will fix the segfault issue.
Fixes: 65c93628599d ("bpftool: Add struct_ops support")
Signed-off-by: Daniel T. Lee <danieltimlee@gmail.com>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Acked-by: Martin KaFai Lau <kafai@fb.com>
Link: https://lore.kernel.org/bpf/20200410020612.2930667-1-danieltimlee@gmail.com
Diffstat (limited to 'tools')
-rw-r--r-- | tools/bpf/bpftool/struct_ops.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/tools/bpf/bpftool/struct_ops.c b/tools/bpf/bpftool/struct_ops.c index 2a7befbd11ad..0fe0d584c57e 100644 --- a/tools/bpf/bpftool/struct_ops.c +++ b/tools/bpf/bpftool/struct_ops.c @@ -591,6 +591,8 @@ int do_struct_ops(int argc, char **argv) err = cmd_select(cmds, argc, argv, do_help); - btf__free(btf_vmlinux); + if (!IS_ERR(btf_vmlinux)) + btf__free(btf_vmlinux); + return err; } |