From 71c3c0b0be0e83d3f6187c4f7ab48e78efa5c187 Mon Sep 17 00:00:00 2001 From: jinzhiguang Date: Fri, 10 May 2024 15:07:49 +0800 Subject: [PATCH] backport patches from upstream backport-libbpf-Free-btf_vmlinux-when-closing-bpf_object.patch Signed-off-by: jinzhiguang --- ...-btf_vmlinux-when-closing-bpf_object.patch | 36 +++++++++++++++++++ libbpf.spec | 7 +++- 2 files changed, 42 insertions(+), 1 deletion(-) create mode 100644 backport-libbpf-Free-btf_vmlinux-when-closing-bpf_object.patch diff --git a/backport-libbpf-Free-btf_vmlinux-when-closing-bpf_object.patch b/backport-libbpf-Free-btf_vmlinux-when-closing-bpf_object.patch new file mode 100644 index 0000000..b4e02e1 --- /dev/null +++ b/backport-libbpf-Free-btf_vmlinux-when-closing-bpf_object.patch @@ -0,0 +1,36 @@ +From a687461867589b82a1cd4ee261aa374a687584b2 Mon Sep 17 00:00:00 2001 +From: Hao Luo +Date: Tue, 22 Aug 2023 12:38:40 -0700 +Subject: [PATCH 1/1] libbpf: Free btf_vmlinux when closing bpf_object + +I hit a memory leak when testing bpf_program__set_attach_target(). +Basically, set_attach_target() may allocate btf_vmlinux, for example, +when setting attach target for bpf_iter programs. But btf_vmlinux +is freed only in bpf_object_load(), which means if we only open +bpf object but not load it, setting attach target may leak +btf_vmlinux. + +So let's free btf_vmlinux in bpf_object__close() anyway. + +Signed-off-by: Hao Luo +Signed-off-by: Andrii Nakryiko +Link: https://lore.kernel.org/bpf/20230822193840.1509809-1-haoluo@google.com +--- + src/libbpf.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/src/libbpf.c b/src/libbpf.c +index b8afe2f..4c3967d 100644 +--- a/src/libbpf.c ++++ b/src/libbpf.c +@@ -8423,6 +8423,7 @@ void bpf_object__close(struct bpf_object *obj) + bpf_object__elf_finish(obj); + bpf_object_unload(obj); + btf__free(obj->btf); ++ btf__free(obj->btf_vmlinux); + btf_ext__free(obj->btf_ext); + + for (i = 0; i < obj->nr_maps; i++) +-- +2.27.0 + diff --git a/libbpf.spec b/libbpf.spec index 7671995..dde81ba 100644 --- a/libbpf.spec +++ b/libbpf.spec @@ -4,7 +4,7 @@ Name: %{githubname} Version: %{githubver} -Release: 2 +Release: 3 Summary: Libbpf library License: LGPLv2 or BSD @@ -17,6 +17,7 @@ Patch0000: backport-libbpf-Ensure-FD-3-during-bpf_map__reuse_fd.patch Patch0001: backport-libbpf-Ensure-libbpf-always-opens-files-with-O_CLOEX.patch Patch0002: backport-libbpf-Set-close-on-exec-flag-on-gzopen.patch Patch0003: backport-libbpf-Fix-NULL-pointer-dereference-in_bpf_object__c.patch +Patch0004: backport-libbpf-Free-btf_vmlinux-when-closing-bpf_object.patch # This package supersedes libbpf from kernel-tools, # which has default Epoch: 0. By having Epoch: 1 @@ -69,6 +70,10 @@ developing applications that use %{name} %{_libdir}/libbpf.a %changelog +* Fri May 10 2024 jinzhiguang 2:1.2.2-3 +- backport patch from upstream: + backport-libbpf-Free-btf_vmlinux-when-closing-bpf_object.patch + * Mon Apr 15 2024 zhangmingyi 2:1.2.2-2 - backport patches from upstream: backport-libbpf-Fix-NULL-pointer-dereference-in_bpf_object__c.patch -- Gitee