diff --git a/0001-bpftool-use-a-local-copy-of-perf_event-to-fix-access.patch b/0001-bpftool-use-a-local-copy-of-perf_event-to-fix-access.patch deleted file mode 100644 index 873f9b5..0000000 --- a/0001-bpftool-use-a-local-copy-of-perf_event-to-fix-access.patch +++ /dev/null @@ -1,63 +0,0 @@ -From 6acb32f72618dbaa9d4938fc3007b0ff7ca151c4 Mon Sep 17 00:00:00 2001 -From: Alexander Lobakin -Date: Thu, 21 Apr 2022 00:38:45 +0000 -Subject: [PATCH] bpftool: use a local copy of perf_event to fix accessing - ::bpf_cookie - -When CONFIG_PERF_EVENTS is not set, struct perf_event remains empty. -However, the structure is being used by bpftool indirectly via BTF. -This leads to: - -skeleton/pid_iter.bpf.c:49:30: error: no member named 'bpf_cookie' in 'struct perf_event' - return BPF_CORE_READ(event, bpf_cookie); - ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~ - -... - -skeleton/pid_iter.bpf.c:49:9: error: returning 'void' from a function with incompatible result type '__u64' (aka 'unsigned long long') - return BPF_CORE_READ(event, bpf_cookie); - ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Tools and samples can't use any CONFIG_ definitions, so the fields -used there should always be present. -Define struct perf_event___local with the `preserve_access_index` -attribute inside the pid_iter BPF prog to allow compiling on any -configs. CO-RE will substitute it with the real struct perf_event -accesses later on. - -Fixes: cbdaf71f7e65 ("bpftool: Add bpf_cookie to link output") -Suggested-by: Andrii Nakryiko -Signed-off-by: Alexander Lobakin -Signed-off-by: Quentin Monnet ---- - tools/bpf/bpftool/skeleton/pid_iter.bpf.c | 6 +++++- - 1 file changed, 5 insertions(+), 1 deletion(-) - -diff --git a/src/skeleton/pid_iter.bpf.c b/src/skeleton/pid_iter.bpf.c -index eb05ea53afb1..e2af8e5fb29e 100644 ---- a/src/skeleton/pid_iter.bpf.c -+++ b/src/skeleton/pid_iter.bpf.c -@@ -15,6 +15,10 @@ enum bpf_obj_type { - BPF_OBJ_BTF, - }; - -+struct perf_event___local { -+ u64 bpf_cookie; -+} __attribute__((preserve_access_index)); -+ - extern const void bpf_link_fops __ksym; - extern const void bpf_map_fops __ksym; - extern const void bpf_prog_fops __ksym; -@@ -41,8 +45,8 @@ static __always_inline __u32 get_obj_id(void *ent, enum bpf_obj_type type) - /* could be used only with BPF_LINK_TYPE_PERF_EVENT links */ - static __u64 get_bpf_cookie(struct bpf_link *link) - { -+ struct perf_event___local *event; - struct bpf_perf_link *perf_link; -- struct perf_event *event; - - perf_link = container_of(link, struct bpf_perf_link, link); - event = BPF_CORE_READ(perf_link, perf_file, private_data); --- -2.40.0 - diff --git a/0002-bpftool-define-a-local-bpf_perf_link-to-fix-accessin.patch b/0002-bpftool-define-a-local-bpf_perf_link-to-fix-accessin.patch deleted file mode 100644 index 01606f1..0000000 --- a/0002-bpftool-define-a-local-bpf_perf_link-to-fix-accessin.patch +++ /dev/null @@ -1,70 +0,0 @@ -From cf4dcbae4799415fc5a85f9bb9f31bbf036f2994 Mon Sep 17 00:00:00 2001 -From: Alexander Lobakin -Date: Thu, 21 Apr 2022 00:38:58 +0000 -Subject: [PATCH] bpftool: define a local bpf_perf_link to fix accessing its - fields - -When building bpftool with !CONFIG_PERF_EVENTS: - -skeleton/pid_iter.bpf.c:47:14: error: incomplete definition of type 'struct bpf_perf_link' - perf_link = container_of(link, struct bpf_perf_link, link); - ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -tools/bpf/bpftool/bootstrap/libbpf/include/bpf/bpf_helpers.h:74:22: note: expanded from macro 'container_of' - ((type *)(__mptr - offsetof(type, member))); \ - ^~~~~~~~~~~~~~~~~~~~~~ -tools/bpf/bpftool/bootstrap/libbpf/include/bpf/bpf_helpers.h:68:60: note: expanded from macro 'offsetof' - #define offsetof(TYPE, MEMBER) ((unsigned long)&((TYPE *)0)->MEMBER) - ~~~~~~~~~~~^ -skeleton/pid_iter.bpf.c:44:9: note: forward declaration of 'struct bpf_perf_link' - struct bpf_perf_link *perf_link; - ^ - -&bpf_perf_link is being defined and used only under the ifdef. -Define struct bpf_perf_link___local with the `preserve_access_index` -attribute inside the pid_iter BPF prog to allow compiling on any -configs. CO-RE will substitute it with the real struct bpf_perf_link -accesses later on. -container_of() is not CO-REd, but it is a noop for -bpf_perf_link <-> bpf_link and the local copy is a full mirror of -the original structure. - -Fixes: cbdaf71f7e65 ("bpftool: Add bpf_cookie to link output") -Suggested-by: Andrii Nakryiko -Signed-off-by: Alexander Lobakin -Signed-off-by: Quentin Monnet ---- - tools/bpf/bpftool/skeleton/pid_iter.bpf.c | 9 +++++++-- - 1 file changed, 7 insertions(+), 2 deletions(-) - -diff --git a/src/skeleton/pid_iter.bpf.c b/src/skeleton/pid_iter.bpf.c -index e2af8e5fb29e..3a4c4f7d83d8 100644 ---- a/src/skeleton/pid_iter.bpf.c -+++ b/src/skeleton/pid_iter.bpf.c -@@ -15,6 +15,11 @@ enum bpf_obj_type { - BPF_OBJ_BTF, - }; - -+struct bpf_perf_link___local { -+ struct bpf_link link; -+ struct file *perf_file; -+} __attribute__((preserve_access_index)); -+ - struct perf_event___local { - u64 bpf_cookie; - } __attribute__((preserve_access_index)); -@@ -45,10 +50,10 @@ static __always_inline __u32 get_obj_id(void *ent, enum bpf_obj_type type) - /* could be used only with BPF_LINK_TYPE_PERF_EVENT links */ - static __u64 get_bpf_cookie(struct bpf_link *link) - { -+ struct bpf_perf_link___local *perf_link; - struct perf_event___local *event; -- struct bpf_perf_link *perf_link; - -- perf_link = container_of(link, struct bpf_perf_link, link); -+ perf_link = container_of(link, struct bpf_perf_link___local, link); - event = BPF_CORE_READ(perf_link, perf_file, private_data); - return BPF_CORE_READ(event, bpf_cookie); - } --- -2.40.0 - diff --git a/0003-bpftool-use-a-local-bpf_perf_event_value-to-fix-acce.patch b/0003-bpftool-use-a-local-bpf_perf_event_value-to-fix-acce.patch deleted file mode 100644 index a2bc5fc..0000000 --- a/0003-bpftool-use-a-local-bpf_perf_event_value-to-fix-acce.patch +++ /dev/null @@ -1,131 +0,0 @@ -From bf5a83d6f1a9851cd1471fba06a58abbab5bc4c4 Mon Sep 17 00:00:00 2001 -From: Alexander Lobakin -Date: Thu, 21 Apr 2022 00:39:04 +0000 -Subject: [PATCH] bpftool: use a local bpf_perf_event_value to fix accessing - its fields - -Fix the following error when building bpftool: - - CLANG profiler.bpf.o - CLANG pid_iter.bpf.o -skeleton/profiler.bpf.c:18:21: error: invalid application of 'sizeof' to an incomplete type 'struct bpf_perf_event_value' - __uint(value_size, sizeof(struct bpf_perf_event_value)); - ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -tools/bpf/bpftool/bootstrap/libbpf/include/bpf/bpf_helpers.h:13:39: note: expanded from macro '__uint' -tools/bpf/bpftool/bootstrap/libbpf/include/bpf/bpf_helper_defs.h:7:8: note: forward declaration of 'struct bpf_perf_event_value' -struct bpf_perf_event_value; - ^ - -struct bpf_perf_event_value is being used in the kernel only when -CONFIG_BPF_EVENTS is enabled, so it misses a BTF entry then. -Define struct bpf_perf_event_value___local with the -`preserve_access_index` attribute inside the pid_iter BPF prog to -allow compiling on any configs. It is a full mirror of a UAPI -structure, so is compatible both with and w/o CO-RE. -bpf_perf_event_read_value() requires a pointer of the original type, -so a cast is needed. - -Fixes: 47c09d6a9f67 ("bpftool: Introduce "prog profile" command") -Suggested-by: Andrii Nakryiko -Signed-off-by: Alexander Lobakin -Signed-off-by: Quentin Monnet ---- - tools/bpf/bpftool/skeleton/profiler.bpf.c | 27 ++++++++++++++--------- - 1 file changed, 17 insertions(+), 10 deletions(-) - -diff --git a/src/skeleton/profiler.bpf.c b/src/skeleton/profiler.bpf.c -index ce5b65e07ab1..2f80edc682f1 100644 ---- a/src/skeleton/profiler.bpf.c -+++ b/src/skeleton/profiler.bpf.c -@@ -4,6 +4,12 @@ - #include - #include - -+struct bpf_perf_event_value___local { -+ __u64 counter; -+ __u64 enabled; -+ __u64 running; -+} __attribute__((preserve_access_index)); -+ - /* map of perf event fds, num_cpu * num_metric entries */ - struct { - __uint(type, BPF_MAP_TYPE_PERF_EVENT_ARRAY); -@@ -15,14 +21,14 @@ struct { - struct { - __uint(type, BPF_MAP_TYPE_PERCPU_ARRAY); - __uint(key_size, sizeof(u32)); -- __uint(value_size, sizeof(struct bpf_perf_event_value)); -+ __uint(value_size, sizeof(struct bpf_perf_event_value___local)); - } fentry_readings SEC(".maps"); - - /* accumulated readings */ - struct { - __uint(type, BPF_MAP_TYPE_PERCPU_ARRAY); - __uint(key_size, sizeof(u32)); -- __uint(value_size, sizeof(struct bpf_perf_event_value)); -+ __uint(value_size, sizeof(struct bpf_perf_event_value___local)); - } accum_readings SEC(".maps"); - - /* sample counts, one per cpu */ -@@ -39,7 +45,7 @@ const volatile __u32 num_metric = 1; - SEC("fentry/XXX") - int BPF_PROG(fentry_XXX) - { -- struct bpf_perf_event_value *ptrs[MAX_NUM_MATRICS]; -+ struct bpf_perf_event_value___local *ptrs[MAX_NUM_MATRICS]; - u32 key = bpf_get_smp_processor_id(); - u32 i; - -@@ -53,10 +59,10 @@ int BPF_PROG(fentry_XXX) - } - - for (i = 0; i < num_metric && i < MAX_NUM_MATRICS; i++) { -- struct bpf_perf_event_value reading; -+ struct bpf_perf_event_value___local reading; - int err; - -- err = bpf_perf_event_read_value(&events, key, &reading, -+ err = bpf_perf_event_read_value(&events, key, (void *)&reading, - sizeof(reading)); - if (err) - return 0; -@@ -68,14 +74,14 @@ int BPF_PROG(fentry_XXX) - } - - static inline void --fexit_update_maps(u32 id, struct bpf_perf_event_value *after) -+fexit_update_maps(u32 id, struct bpf_perf_event_value___local *after) - { -- struct bpf_perf_event_value *before, diff; -+ struct bpf_perf_event_value___local *before, diff; - - before = bpf_map_lookup_elem(&fentry_readings, &id); - /* only account samples with a valid fentry_reading */ - if (before && before->counter) { -- struct bpf_perf_event_value *accum; -+ struct bpf_perf_event_value___local *accum; - - diff.counter = after->counter - before->counter; - diff.enabled = after->enabled - before->enabled; -@@ -93,7 +99,7 @@ fexit_update_maps(u32 id, struct bpf_perf_event_value *after) - SEC("fexit/XXX") - int BPF_PROG(fexit_XXX) - { -- struct bpf_perf_event_value readings[MAX_NUM_MATRICS]; -+ struct bpf_perf_event_value___local readings[MAX_NUM_MATRICS]; - u32 cpu = bpf_get_smp_processor_id(); - u32 i, zero = 0; - int err; -@@ -102,7 +108,8 @@ int BPF_PROG(fexit_XXX) - /* read all events before updating the maps, to reduce error */ - for (i = 0; i < num_metric && i < MAX_NUM_MATRICS; i++) { - err = bpf_perf_event_read_value(&events, cpu + i * num_cpu, -- readings + i, sizeof(*readings)); -+ (void *)(readings + i), -+ sizeof(*readings)); - if (err) - return 0; - } --- -2.40.0 - diff --git a/0004-bpftool-Use-a-local-copy-of-BPF_LINK_TYPE_PERF_EVENT.patch b/0004-bpftool-Use-a-local-copy-of-BPF_LINK_TYPE_PERF_EVENT.patch deleted file mode 100644 index f1ab219..0000000 --- a/0004-bpftool-Use-a-local-copy-of-BPF_LINK_TYPE_PERF_EVENT.patch +++ /dev/null @@ -1,51 +0,0 @@ -From a9a8284ebebfdad29f4596c14cc9d5ae07b33430 Mon Sep 17 00:00:00 2001 -From: Quentin Monnet -Date: Wed, 10 May 2023 18:22:50 +0100 -Subject: [PATCH] bpftool: Use a local copy of BPF_LINK_TYPE_PERF_EVENT in - pid_iter.bpf.c - -In order to allow the BPF program in bpftool's pid_iter.bpf.c to compile -correctly on hosts where vmlinux.h does not define -BPF_LINK_TYPE_PERF_EVENT (running kernel versions lower than 5.15, for -example), define and use a local, CO-RE compatible copy of the enum -value. - -Signed-off-by: Quentin Monnet ---- - tools/bpf/bpftool/skeleton/pid_iter.bpf.c | 11 +++++++++-- - 1 file changed, 9 insertions(+), 2 deletions(-) - -diff --git a/src/skeleton/pid_iter.bpf.c b/src/skeleton/pid_iter.bpf.c -index 3a4c4f7d83d8..26004f0c5a6a 100644 ---- a/src/skeleton/pid_iter.bpf.c -+++ b/src/skeleton/pid_iter.bpf.c -@@ -24,6 +24,10 @@ struct perf_event___local { - u64 bpf_cookie; - } __attribute__((preserve_access_index)); - -+enum bpf_link_type___local { -+ BPF_LINK_TYPE_PERF_EVENT___local = 7, -+}; -+ - extern const void bpf_link_fops __ksym; - extern const void bpf_map_fops __ksym; - extern const void bpf_prog_fops __ksym; -@@ -93,10 +97,13 @@ int iter(struct bpf_iter__task_file *ctx) - e.pid = task->tgid; - e.id = get_obj_id(file->private_data, obj_type); - -- if (obj_type == BPF_OBJ_LINK) { -+ if (obj_type == BPF_OBJ_LINK && -+ bpf_core_enum_value_exists(enum bpf_link_type___local, -+ BPF_LINK_TYPE_PERF_EVENT___local)) { - struct bpf_link *link = (struct bpf_link *) file->private_data; - -- if (BPF_CORE_READ(link, type) == BPF_LINK_TYPE_PERF_EVENT) { -+ if (link->type == bpf_core_enum_value(enum bpf_link_type___local, -+ BPF_LINK_TYPE_PERF_EVENT___local)) { - e.has_bpf_cookie = true; - e.bpf_cookie = get_bpf_cookie(link); - } --- -2.40.0 - diff --git a/bpftool-libbpf-v7.2.0-sources.tar.gz b/bpftool-libbpf-v7.2.0-sources.tar.gz deleted file mode 100644 index 9fa4065..0000000 --- a/bpftool-libbpf-v7.2.0-sources.tar.gz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:baa1e1c2a79c06a1f3112be3e47a6b4e00df0dc07a1e9117f2213a96fb37bf8a -size 2643306 diff --git a/bpftool-libbpf-v7.3.0-sources.tar.gz b/bpftool-libbpf-v7.3.0-sources.tar.gz new file mode 100644 index 0000000..c7aeb4c --- /dev/null +++ b/bpftool-libbpf-v7.3.0-sources.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3e8a12b800a09f7b78f27716c9d54ac814f1caeed38bd4e9b99f3fc0ee8788e9 +size 1465652 diff --git a/bpftool.changes b/bpftool.changes index b894ad5..b12e31b 100644 --- a/bpftool.changes +++ b/bpftool.changes @@ -1,3 +1,24 @@ +------------------------------------------------------------------- +Tue Nov 28 07:24:46 UTC 2023 - Shung-Hsi Yu + +- Update to version 7.3.0 + * deprecate keyword "dev" for specifying interface name, use + offload_dev instead + * support passing an interface name with xdpmeta_dev + with "prog load" + * show more details information when displaying BPF links + * show netfilter, tcx, and netkit information in the "net list" + * support cgroup UNIX socket attach points + * show inner map IDs (instead of raw values) with "map dump" + * support LLVM's v4 instructions in the disassembler + * fix JIT compiler global memory limit report for unprivileged + users on aarch64 +- Remove backported patches that have been included in v7.3.0 + * drop 0001-bpftool-use-a-local-copy-of-perf_event-to-fix-access.patch + * drop 0002-bpftool-define-a-local-bpf_perf_link-to-fix-accessin.patch + * drop 0003-bpftool-use-a-local-bpf_perf_event_value-to-fix-acce.patch + * drop 0004-bpftool-Use-a-local-copy-of-BPF_LINK_TYPE_PERF_EVENT.patch + ------------------------------------------------------------------- Wed Mar 29 17:35:09 UTC 2023 - Michal Suchanek diff --git a/bpftool.spec b/bpftool.spec index b92309f..9bfb921 100644 --- a/bpftool.spec +++ b/bpftool.spec @@ -17,7 +17,7 @@ Name: bpftool -Version: 7.2.0 +Version: 7.3.0 Release: 0 Summary: Tool for inspection and manipulation of BPF programs and maps License: GPL-2.0-only @@ -25,10 +25,6 @@ Group: Development/Tools/Other URL: https://www.kernel.org/ Source0: https://github.com/libbpf/bpftool/releases/download/v%{version}/bpftool-libbpf-v%{version}-sources.tar.gz Patch0: binutils-2.40.patch -Patch1: 0001-bpftool-use-a-local-copy-of-perf_event-to-fix-access.patch -Patch2: 0002-bpftool-define-a-local-bpf_perf_link-to-fix-accessin.patch -Patch3: 0003-bpftool-use-a-local-bpf_perf_event_value-to-fix-acce.patch -Patch4: 0004-bpftool-Use-a-local-copy-of-BPF_LINK_TYPE_PERF_EVENT.patch BuildRequires: binutils-devel %if 0%{?suse_version} && 0%{?suse_version} <= 1500 %if 0%{?sle_version} < 150400 @@ -59,7 +55,7 @@ Supplements: (%{name} and bash-completion) bash command line completion support for bpftool. %prep -%autosetup -p1 -n %{name} +%autosetup -p1 -n bpftool-libbpf-v%{version}-sources sed -i -e 's/CFLAGS += -O2/CFLAGS = $(RPM_OPT_FLAGS)/' src/Makefile %build