summaryrefslogtreecommitdiffstats
path: root/tools/bpf/bpftool/struct_ops.c
diff options
context:
space:
mode:
authorDaniel T. Lee <danieltimlee@gmail.com>2020-04-10 04:06:12 +0200
committerDaniel Borkmann <daniel@iogearbox.net>2020-04-14 21:33:53 +0200
commit96b2eb6e77959b4b52f80e7a61d03db77606aac6 (patch)
tree4b2925662cb05bc2667f432372bcbc02956b0439 /tools/bpf/bpftool/struct_ops.c
parentselftests/bpf: Validate frozen map contents stays frozen (diff)
downloadlinux-96b2eb6e77959b4b52f80e7a61d03db77606aac6.tar.xz
linux-96b2eb6e77959b4b52f80e7a61d03db77606aac6.zip
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/bpf/bpftool/struct_ops.c')
-rw-r--r--tools/bpf/bpftool/struct_ops.c4
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;
}