You've already forked linux-rockchip
mirror of
https://github.com/armbian/linux-rockchip.git
synced 2026-01-06 11:08:10 -08:00
bpftool: Avoid leaking the JSON writer prepared for program metadata
[ Upstream commite89ef634f8] Bpftool creates a new JSON object for writing program metadata in plain text mode, regardless of metadata being present or not. Then this writer is freed if any metadata has been found and printed, but it leaks otherwise. We cannot destroy the object unconditionally, because the destructor prints an undesirable line break. Instead, make sure the writer is created only after we have found program metadata to print. Found with valgrind. Fixes:aff52e685e("bpftool: Support dumping metadata") Signed-off-by: Quentin Monnet <quentin@isovalent.com> Signed-off-by: Andrii Nakryiko <andrii@kernel.org> Link: https://lore.kernel.org/bpf/20211022094743.11052-1-quentin@isovalent.com Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
7cd4af996c
commit
0b95aaa493
@@ -304,18 +304,12 @@ static void show_prog_metadata(int fd, __u32 num_maps)
|
||||
if (printed_header)
|
||||
jsonw_end_object(json_wtr);
|
||||
} else {
|
||||
json_writer_t *btf_wtr = jsonw_new(stdout);
|
||||
json_writer_t *btf_wtr;
|
||||
struct btf_dumper d = {
|
||||
.btf = btf,
|
||||
.jw = btf_wtr,
|
||||
.is_plain_text = true,
|
||||
};
|
||||
|
||||
if (!btf_wtr) {
|
||||
p_err("jsonw alloc failed");
|
||||
goto out_free;
|
||||
}
|
||||
|
||||
for (i = 0; i < vlen; i++, vsi++) {
|
||||
t_var = btf__type_by_id(btf, vsi->type);
|
||||
name = btf__name_by_offset(btf, t_var->name_off);
|
||||
@@ -325,6 +319,14 @@ static void show_prog_metadata(int fd, __u32 num_maps)
|
||||
|
||||
if (!printed_header) {
|
||||
printf("\tmetadata:");
|
||||
|
||||
btf_wtr = jsonw_new(stdout);
|
||||
if (!btf_wtr) {
|
||||
p_err("jsonw alloc failed");
|
||||
goto out_free;
|
||||
}
|
||||
d.jw = btf_wtr,
|
||||
|
||||
printed_header = true;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user