From e10173528115dd98487711fa472f5a4cdeba83b2 Mon Sep 17 00:00:00 2001 From: zhang-mingyi66 Date: Wed, 9 Oct 2024 06:24:58 +0800 Subject: [PATCH] backport patches from upstream: backport-libbpf-Add-NULL-checks-to-bpf_object__prev_map,next_.patch backport-libbpf-Apply-map_set_def_max_entries-for-inner_maps-.patch backport-libbpf-Fix-uninitialized-warning-in-btf_dump_dump_ty.patch Signed-off-by: zhang-mingyi66 (cherry picked from commit 1dcf95dee05a18021c342e91e18a89598b9b1e1f) --- ...checks-to-bpf_object__prev_map,next_.patch | 53 +++++++++++++++++++ ..._set_def_max_entries-for-inner_maps-.patch | 49 +++++++++++++++++ ...tialized-warning-in-btf_dump_dump_ty.patch | 42 +++++++++++++++ libbpf.spec | 12 ++++- 4 files changed, 155 insertions(+), 1 deletion(-) create mode 100644 backport-libbpf-Add-NULL-checks-to-bpf_object__prev_map,next_.patch create mode 100644 backport-libbpf-Apply-map_set_def_max_entries-for-inner_maps-.patch create mode 100644 backport-libbpf-Fix-uninitialized-warning-in-btf_dump_dump_ty.patch diff --git a/backport-libbpf-Add-NULL-checks-to-bpf_object__prev_map,next_.patch b/backport-libbpf-Add-NULL-checks-to-bpf_object__prev_map,next_.patch new file mode 100644 index 0000000..1b6c721 --- /dev/null +++ b/backport-libbpf-Add-NULL-checks-to-bpf_object__prev_map,next_.patch @@ -0,0 +1,53 @@ +From 1867490d8fc635c552569d51c48debff588d2191 Mon Sep 17 00:00:00 2001 +From: Andreas Ziegler +Date: Wed, 3 Jul 2024 10:34:36 +0200 +Subject: [PATCH] libbpf: Add NULL checks to bpf_object__{prev_map,next_map} + +In the current state, an erroneous call to +bpf_object__find_map_by_name(NULL, ...) leads to a segmentation +fault through the following call chain: + + bpf_object__find_map_by_name(obj = NULL, ...) + -> bpf_object__for_each_map(pos, obj = NULL) + -> bpf_object__next_map((obj = NULL), NULL) + -> return (obj = NULL)->maps + +While calling bpf_object__find_map_by_name with obj = NULL is +obviously incorrect, this should not lead to a segmentation +fault but rather be handled gracefully. + +As __bpf_map__iter already handles this situation correctly, we +can delegate the check for the regular case there and only add +a check in case the prev or next parameter is NULL. + +Signed-off-by: Andreas Ziegler +Signed-off-by: Daniel Borkmann +Link: https://lore.kernel.org/bpf/20240703083436.505124-1-ziegler.andreas@siemens.com +--- + src/libbpf.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/src/libbpf.c b/src/libbpf.c +index 4a28fac49..30f121754 100644 +--- a/src/libbpf.c ++++ b/src/libbpf.c +@@ -10375,7 +10375,7 @@ __bpf_map__iter(const struct bpf_map *m, const struct bpf_object *obj, int i) + struct bpf_map * + bpf_object__next_map(const struct bpf_object *obj, const struct bpf_map *prev) + { +- if (prev == NULL) ++ if (prev == NULL && obj != NULL) + return obj->maps; + + return __bpf_map__iter(prev, obj, 1); +@@ -10384,7 +10384,7 @@ bpf_object__next_map(const struct bpf_object *obj, const struct bpf_map *prev) + struct bpf_map * + bpf_object__prev_map(const struct bpf_object *obj, const struct bpf_map *next) + { +- if (next == NULL) { ++ if (next == NULL && obj != NULL) { + if (!obj->nr_maps) + return NULL; + return obj->maps + obj->nr_maps - 1; +-- +2.33.0 diff --git a/backport-libbpf-Apply-map_set_def_max_entries-for-inner_maps-.patch b/backport-libbpf-Apply-map_set_def_max_entries-for-inner_maps-.patch new file mode 100644 index 0000000..dfdcd24 --- /dev/null +++ b/backport-libbpf-Apply-map_set_def_max_entries-for-inner_maps-.patch @@ -0,0 +1,49 @@ +From 89ca11a79bb93824e82897bdb48727b5d75e469a Mon Sep 17 00:00:00 2001 +From: Andrey Grafin +Date: Wed, 17 Jan 2024 16:06:18 +0300 +Subject: [PATCH] libbpf: Apply map_set_def_max_entries() for inner_maps on + creation + +This patch allows to auto create BPF_MAP_TYPE_ARRAY_OF_MAPS and +BPF_MAP_TYPE_HASH_OF_MAPS with values of BPF_MAP_TYPE_PERF_EVENT_ARRAY +by bpf_object__load(). + +Previous behaviour created a zero filled btf_map_def for inner maps and +tried to use it for a map creation but the linux kernel forbids to create +a BPF_MAP_TYPE_PERF_EVENT_ARRAY map with max_entries=0. + +Fixes: 646f02ffdd49 ("libbpf: Add BTF-defined map-in-map support") +Signed-off-by: Andrey Grafin +Signed-off-by: Andrii Nakryiko +Acked-by: Yonghong Song +Acked-by: Hou Tao +Link: https://lore.kernel.org/bpf/20240117130619.9403-1-conquistador@yandex-team.ru +Signed-off-by: Alexei Starovoitov +--- + src/libbpf.c | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/src/libbpf.c b/src/libbpf.c +index afd09571c..b8b00da62 100644 +--- a/src/libbpf.c ++++ b/src/libbpf.c +@@ -70,6 +70,7 @@ + + static struct bpf_map *bpf_object__add_map(struct bpf_object *obj); + static bool prog_is_subprog(const struct bpf_object *obj, const struct bpf_program *prog); ++static int map_set_def_max_entries(struct bpf_map *map); + + static int __base_pr(enum libbpf_print_level level, const char *format, + va_list args) +@@ -5172,6 +5173,9 @@ static int bpf_object__create_map(struct bpf_object *obj, struct bpf_map *map, b + + if (bpf_map_type__is_map_in_map(def->type)) { + if (map->inner_map) { ++ err = map_set_def_max_entries(map->inner_map); ++ if (err) ++ return err; + err = bpf_object__create_map(obj, map->inner_map, true); + if (err) { + pr_warn("map '%s': failed to create inner map: %d\n", +-- +2.33.0 diff --git a/backport-libbpf-Fix-uninitialized-warning-in-btf_dump_dump_ty.patch b/backport-libbpf-Fix-uninitialized-warning-in-btf_dump_dump_ty.patch new file mode 100644 index 0000000..8a06fb8 --- /dev/null +++ b/backport-libbpf-Fix-uninitialized-warning-in-btf_dump_dump_ty.patch @@ -0,0 +1,42 @@ +From c975797ebecb07934d1399e1595db8e0d55bec04 Mon Sep 17 00:00:00 2001 +From: David Michael +Date: Sun, 13 Nov 2022 15:52:17 -0500 +Subject: [PATCH] libbpf: Fix uninitialized warning in btf_dump_dump_type_data +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +GCC 11.3.0 fails to compile btf_dump.c due to the following error, +which seems to originate in btf_dump_struct_data where the returned +value would be uninitialized if btf_vlen returns zero. + +btf_dump.c: In function ‘btf_dump_dump_type_data’: +btf_dump.c:2363:12: error: ‘err’ may be used uninitialized in this function [-Werror=maybe-uninitialized] + 2363 | if (err < 0) + | ^ + +Fixes: 920d16af9b42 ("libbpf: BTF dumper support for typed data") +Signed-off-by: David Michael +Signed-off-by: Daniel Borkmann +Acked-by: Stanislav Fomichev +Acked-by: Alan Maguire +Link: https://lore.kernel.org/bpf/87zgcu60hq.fsf@gmail.com +--- + src/btf_dump.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/btf_dump.c b/src/btf_dump.c +index 12f7039e0..e9f849d82 100644 +--- a/src/btf_dump.c ++++ b/src/btf_dump.c +@@ -1989,7 +1989,7 @@ static int btf_dump_struct_data(struct btf_dump *d, + { + const struct btf_member *m = btf_members(t); + __u16 n = btf_vlen(t); +- int i, err; ++ int i, err = 0; + + /* note that we increment depth before calling btf_dump_print() below; + * this is intentional. btf_dump_data_newline() will not print a +-- +2.33.0 diff --git a/libbpf.spec b/libbpf.spec index 39ea777..0df33b5 100644 --- a/libbpf.spec +++ b/libbpf.spec @@ -4,7 +4,7 @@ Name: %{githubname} Version: %{githubver} -Release: 15 +Release: 16 Summary: Libbpf library License: LGPLv2 or BSD @@ -44,6 +44,10 @@ Patch0027: backport-libbpf-Initialize-err-in-probe_map_create.patch Patch0028: backport-libbpf-Modify-the-function-name-in-libbpf.c-to-match.patch Patch0029: backport-libbpf-Fix-an-error-in-64bit-relocation-value-comput.patch Patch0030: backport-libbpf-Avoid-uninitialized-value-in-BPF_CORE_READ_BI.patch +Patch0031: backport-libbpf-Add-NULL-checks-to-bpf_object__prev_map,next_.patch +Patch0032: backport-libbpf-Apply-map_set_def_max_entries-for-inner_maps-.patch +Patch0033: backport-libbpf-Fix-uninitialized-warning-in-btf_dump_dump_ty.patch + # This package supersedes libbpf from kernel-tools, # which has default Epoch: 0. By having Epoch: 1 @@ -96,6 +100,12 @@ developing applications that use %{name} %{_libdir}/libbpf.a %changelog +* Wed Oct 09 2024 zhangmingyi 2:0.8.1-16 +- backport patch from upstream: + backport-libbpf-Add-NULL-checks-to-bpf_object__prev_map,next_.patch + backport-libbpf-Apply-map_set_def_max_entries-for-inner_maps-.patch + backport-libbpf-Fix-uninitialized-warning-in-btf_dump_dump_ty.patch + * Wed Sep 25 2024 zhangmingyi 2:0.8.1-15 - backport patch from upstream: backport-libbpf-Avoid-uninitialized-value-in-BPF_CORE_READ_BI.patch -- Gitee