From: Jiri Olsa <jolsa@kernel.org> Date: 2022-02-16 09:21:09
The commit e5043894b21f ("bpftool: Use libbpf_get_error() to check error")
fails to dump map without BTF loaded in pretty mode (-p option).
Fixing this by making sure get_map_kv_btf won't fail in case there's
no BTF available for the map.
Cc: Yinjun Zhang <redacted>
Fixes: e5043894b21f ("bpftool: Use libbpf_get_error() to check error")
Suggested-by: Andrii Nakryiko <andrii@kernel.org>
Signed-off-by: Jiri Olsa <jolsa@kernel.org>
---
tools/bpf/bpftool/map.c | 29 +++++++++++++----------------
1 file changed, 13 insertions(+), 16 deletions(-)
@@ -805,29 +805,28 @@ static int maps_have_btf(int *fds, int nb_fds)staticstructbtf*btf_vmlinux;-staticstructbtf*get_map_kv_btf(conststructbpf_map_info*info)+staticintget_map_kv_btf(conststructbpf_map_info*info,structbtf**btf){-structbtf*btf=NULL;+interr=0;if(info->btf_vmlinux_value_type_id){if(!btf_vmlinux){btf_vmlinux=libbpf_find_kernel_btf();-if(libbpf_get_error(btf_vmlinux))+err=libbpf_get_error(btf_vmlinux);+if(err){p_err("failed to get kernel btf");+returnerr;+}}-returnbtf_vmlinux;+*btf=btf_vmlinux;}elseif(info->btf_value_type_id){-interr;--btf=btf__load_from_kernel_by_id(info->btf_id);-err=libbpf_get_error(btf);-if(err){+*btf=btf__load_from_kernel_by_id(info->btf_id);+err=libbpf_get_error(*btf);+if(err)p_err("failed to get btf");-btf=ERR_PTR(err);-}}-returnbtf;+returnerr;}staticvoidfree_map_kv_btf(structbtf*btf)
Hello:
This patch was applied to bpf/bpf-next.git (master)
by Andrii Nakryiko [off-list ref]:
On Wed, 16 Feb 2022 10:21:02 +0100 you wrote:
The commit e5043894b21f ("bpftool: Use libbpf_get_error() to check error")
fails to dump map without BTF loaded in pretty mode (-p option).
Fixing this by making sure get_map_kv_btf won't fail in case there's
no BTF available for the map.
Cc: Yinjun Zhang <redacted>
Fixes: e5043894b21f ("bpftool: Use libbpf_get_error() to check error")
Suggested-by: Andrii Nakryiko <andrii@kernel.org>
Signed-off-by: Jiri Olsa <jolsa@kernel.org>
[...]
On Wed, Feb 16, 2022 at 1:21 AM Jiri Olsa [off-list ref] wrote:
quoted hunk
The commit e5043894b21f ("bpftool: Use libbpf_get_error() to check error")
fails to dump map without BTF loaded in pretty mode (-p option).
Fixing this by making sure get_map_kv_btf won't fail in case there's
no BTF available for the map.
Cc: Yinjun Zhang <redacted>
Fixes: e5043894b21f ("bpftool: Use libbpf_get_error() to check error")
Suggested-by: Andrii Nakryiko <andrii@kernel.org>
Signed-off-by: Jiri Olsa <jolsa@kernel.org>
---
tools/bpf/bpftool/map.c | 29 +++++++++++++----------------
1 file changed, 13 insertions(+), 16 deletions(-)
@@ -805,29 +805,28 @@ static int maps_have_btf(int *fds, int nb_fds)staticstructbtf*btf_vmlinux;-staticstructbtf*get_map_kv_btf(conststructbpf_map_info*info)+staticintget_map_kv_btf(conststructbpf_map_info*info,structbtf**btf){-structbtf*btf=NULL;+interr=0;if(info->btf_vmlinux_value_type_id){if(!btf_vmlinux){btf_vmlinux=libbpf_find_kernel_btf();-if(libbpf_get_error(btf_vmlinux))+err=libbpf_get_error(btf_vmlinux);+if(err){p_err("failed to get kernel btf");+returnerr;+}}-returnbtf_vmlinux;+*btf=btf_vmlinux;}elseif(info->btf_value_type_id){-interr;--btf=btf__load_from_kernel_by_id(info->btf_id);-err=libbpf_get_error(btf);-if(err){+*btf=btf__load_from_kernel_by_id(info->btf_id);+err=libbpf_get_error(*btf);+if(err)p_err("failed to get btf");-btf=ERR_PTR(err);-}}
get_map_kv_btf is supposed to set btf to NULL, otherwise you can get a
crash in the caller
I've added
else {
*btf = NULL;
}
and force-pushed