mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-03 00:54:09 +08:00
libbpf: Fix memory leak when emitting final btf_ext
Free temporary allocated memory used to construct finalized .BTF.ext data.
Found by Coverity static analysis on libbpf's Github repo.
Fixes: 8fd27bf69b
("libbpf: Add BPF static linker BTF and BTF.ext support")
Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Acked-by: Song Liu <songliubraving@fb.com>
Link: https://lore.kernel.org/bpf/20210327042502.969745-1-andrii@kernel.org
This commit is contained in:
parent
b83fd195c2
commit
05d817031f
@ -1906,8 +1906,10 @@ static int finalize_btf_ext(struct bpf_linker *linker)
|
||||
struct dst_sec *sec = &linker->secs[i];
|
||||
|
||||
sz = emit_btf_ext_data(linker, cur, sec->sec_name, &sec->func_info);
|
||||
if (sz < 0)
|
||||
return sz;
|
||||
if (sz < 0) {
|
||||
err = sz;
|
||||
goto out;
|
||||
}
|
||||
|
||||
cur += sz;
|
||||
}
|
||||
@ -1921,8 +1923,10 @@ static int finalize_btf_ext(struct bpf_linker *linker)
|
||||
struct dst_sec *sec = &linker->secs[i];
|
||||
|
||||
sz = emit_btf_ext_data(linker, cur, sec->sec_name, &sec->line_info);
|
||||
if (sz < 0)
|
||||
return sz;
|
||||
if (sz < 0) {
|
||||
err = sz;
|
||||
goto out;
|
||||
}
|
||||
|
||||
cur += sz;
|
||||
}
|
||||
@ -1936,8 +1940,10 @@ static int finalize_btf_ext(struct bpf_linker *linker)
|
||||
struct dst_sec *sec = &linker->secs[i];
|
||||
|
||||
sz = emit_btf_ext_data(linker, cur, sec->sec_name, &sec->core_relo_info);
|
||||
if (sz < 0)
|
||||
return sz;
|
||||
if (sz < 0) {
|
||||
err = sz;
|
||||
goto out;
|
||||
}
|
||||
|
||||
cur += sz;
|
||||
}
|
||||
@ -1948,8 +1954,10 @@ static int finalize_btf_ext(struct bpf_linker *linker)
|
||||
if (err) {
|
||||
linker->btf_ext = NULL;
|
||||
pr_warn("failed to parse final .BTF.ext data: %d\n", err);
|
||||
return err;
|
||||
goto out;
|
||||
}
|
||||
|
||||
return 0;
|
||||
out:
|
||||
free(data);
|
||||
return err;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user