Thread (3 messages) read the whole thread 3 messages, 3 authors, 2021-03-30

Re: [PATCH bpf-next] libbpf: fix memory leak when emitting final btf_ext

From: Song Liu <song@kernel.org>
Date: 2021-03-29 15:56:06
Also in: bpf

On Fri, Mar 26, 2021 at 9:35 PM Andrii Nakryiko [off-list ref] wrote:
Free temporary allocated memory used to construct finalized .BTF.ext data.
Found by Coverity static analysis on libbpf's Github repo.

Fixes: 8fd27bf69b86 ("libbpf: Add BPF static linker BTF and BTF.ext support")
Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
Acked-by: Song Liu <redacted>

quoted hunk ↗ jump to hunk
---
 tools/lib/bpf/linker.c | 24 ++++++++++++++++--------
 1 file changed, 16 insertions(+), 8 deletions(-)
diff --git a/tools/lib/bpf/linker.c b/tools/lib/bpf/linker.c
index a29d62ff8041..46b16cbdcda3 100644
--- a/tools/lib/bpf/linker.c
+++ b/tools/lib/bpf/linker.c
@@ -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;
 }
--
2.30.2
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help