Skip to content

Commit 05d8170

Browse files
anakryikoAlexei Starovoitov
authored andcommitted
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: 8fd27bf ("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
1 parent b83fd19 commit 05d8170

File tree

1 file changed

+16
-8
lines changed

1 file changed

+16
-8
lines changed

tools/lib/bpf/linker.c

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1906,8 +1906,10 @@ static int finalize_btf_ext(struct bpf_linker *linker)
19061906
struct dst_sec *sec = &linker->secs[i];
19071907

19081908
sz = emit_btf_ext_data(linker, cur, sec->sec_name, &sec->func_info);
1909-
if (sz < 0)
1910-
return sz;
1909+
if (sz < 0) {
1910+
err = sz;
1911+
goto out;
1912+
}
19111913

19121914
cur += sz;
19131915
}
@@ -1921,8 +1923,10 @@ static int finalize_btf_ext(struct bpf_linker *linker)
19211923
struct dst_sec *sec = &linker->secs[i];
19221924

19231925
sz = emit_btf_ext_data(linker, cur, sec->sec_name, &sec->line_info);
1924-
if (sz < 0)
1925-
return sz;
1926+
if (sz < 0) {
1927+
err = sz;
1928+
goto out;
1929+
}
19261930

19271931
cur += sz;
19281932
}
@@ -1936,8 +1940,10 @@ static int finalize_btf_ext(struct bpf_linker *linker)
19361940
struct dst_sec *sec = &linker->secs[i];
19371941

19381942
sz = emit_btf_ext_data(linker, cur, sec->sec_name, &sec->core_relo_info);
1939-
if (sz < 0)
1940-
return sz;
1943+
if (sz < 0) {
1944+
err = sz;
1945+
goto out;
1946+
}
19411947

19421948
cur += sz;
19431949
}
@@ -1948,8 +1954,10 @@ static int finalize_btf_ext(struct bpf_linker *linker)
19481954
if (err) {
19491955
linker->btf_ext = NULL;
19501956
pr_warn("failed to parse final .BTF.ext data: %d\n", err);
1951-
return err;
1957+
goto out;
19521958
}
19531959

1954-
return 0;
1960+
out:
1961+
free(data);
1962+
return err;
19551963
}

0 commit comments

Comments
 (0)