forked from pool/libbpf
Compare commits
2 Commits
Author | SHA256 | Date | |
---|---|---|---|
2238141547 | |||
|
8a95084b54 |
@@ -1,67 +0,0 @@
|
|||||||
From 1f7c2f78d74e239ee4fce03f9a858062ae3d5512 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Alan Maguire <alan.maguire@oracle.com>
|
|
||||||
Date: Tue, 29 Apr 2025 17:10:42 +0100
|
|
||||||
Subject: [PATCH 1/1] libbpf: Add identical pointer detection to
|
|
||||||
btf_dedup_is_equiv()
|
|
||||||
|
|
||||||
Recently as a side-effect of
|
|
||||||
|
|
||||||
commit ac053946f5c4 ("compiler.h: introduce TYPEOF_UNQUAL() macro")
|
|
||||||
|
|
||||||
issues were observed in deduplication between modules and kernel BTF
|
|
||||||
such that a large number of kernel types were not deduplicated so
|
|
||||||
were found in module BTF (task_struct, bpf_prog etc). The root cause
|
|
||||||
appeared to be a failure to dedup struct types, specifically those
|
|
||||||
with members that were pointers with __percpu annotations.
|
|
||||||
|
|
||||||
The issue in dedup is at the point that we are deduplicating structures,
|
|
||||||
we have not yet deduplicated reference types like pointers. If multiple
|
|
||||||
copies of a pointer point at the same (deduplicated) integer as in this
|
|
||||||
case, we do not see them as identical. Special handling already exists
|
|
||||||
to deal with structures and arrays, so add pointer handling here too.
|
|
||||||
|
|
||||||
Reported-by: Alexei Starovoitov <ast@kernel.org>
|
|
||||||
Signed-off-by: Alan Maguire <alan.maguire@oracle.com>
|
|
||||||
Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
|
|
||||||
Link: https://lore.kernel.org/bpf/20250429161042.2069678-1-alan.maguire@oracle.com
|
|
||||||
---
|
|
||||||
src/btf.c | 16 ++++++++++++++++
|
|
||||||
1 file changed, 16 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/src/btf.c b/src/btf.c
|
|
||||||
index e9673c0..c7df63d 100644
|
|
||||||
--- a/src/btf.c
|
|
||||||
+++ b/src/btf.c
|
|
||||||
@@ -4337,6 +4337,19 @@ static bool btf_dedup_identical_structs(struct btf_dedup *d, __u32 id1, __u32 id
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
+static bool btf_dedup_identical_ptrs(struct btf_dedup *d, __u32 id1, __u32 id2)
|
|
||||||
+{
|
|
||||||
+ struct btf_type *t1, *t2;
|
|
||||||
+
|
|
||||||
+ t1 = btf_type_by_id(d->btf, id1);
|
|
||||||
+ t2 = btf_type_by_id(d->btf, id2);
|
|
||||||
+
|
|
||||||
+ if (!btf_is_ptr(t1) || !btf_is_ptr(t2))
|
|
||||||
+ return false;
|
|
||||||
+
|
|
||||||
+ return t1->type == t2->type;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
/*
|
|
||||||
* Check equivalence of BTF type graph formed by candidate struct/union (we'll
|
|
||||||
* call it "candidate graph" in this description for brevity) to a type graph
|
|
||||||
@@ -4469,6 +4482,9 @@ static int btf_dedup_is_equiv(struct btf_dedup *d, __u32 cand_id,
|
|
||||||
*/
|
|
||||||
if (btf_dedup_identical_structs(d, hypot_type_id, cand_id))
|
|
||||||
return 1;
|
|
||||||
+ /* A similar case is again observed for PTRs. */
|
|
||||||
+ if (btf_dedup_identical_ptrs(d, hypot_type_id, cand_id))
|
|
||||||
+ return 1;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
--
|
|
||||||
2.49.0
|
|
||||||
|
|
BIN
libbpf-1.5.1.tar.gz
(Stored with Git LFS)
BIN
libbpf-1.5.1.tar.gz
(Stored with Git LFS)
Binary file not shown.
BIN
libbpf-1.6.1.tar.gz
(Stored with Git LFS)
Normal file
BIN
libbpf-1.6.1.tar.gz
(Stored with Git LFS)
Normal file
Binary file not shown.
@@ -1,8 +1,42 @@
|
|||||||
|
-------------------------------------------------------------------
|
||||||
|
Mon Jul 21 03:31:14 UTC 2025 - Shung-Hsi Yu <shung-hsi.yu@suse.com>
|
||||||
|
|
||||||
|
- update to 1.6.0:
|
||||||
|
* add more control over BPF object lifetime with new preparation step
|
||||||
|
(bpf_object__prepare() API)
|
||||||
|
* libbpf will report symbolic error code (e.g., "-EINVAL") in addition to
|
||||||
|
human-readable error description
|
||||||
|
* bpf_prog_stream_read() API
|
||||||
|
* BPF token support when attaching BPF trampoline-based BPF programs in
|
||||||
|
bpf_program__set_attach_target()
|
||||||
|
* BPF token support for BPF_BTF_GET_FD_BY_ID command
|
||||||
|
* support multi-uprobe session (SEC("uprobe.session")) BPF programs
|
||||||
|
* support unique_match option for multi-kprobe attachment
|
||||||
|
* support creating and destroying qdisk with BPF_TC_QDISC flag;
|
||||||
|
* bpf_program__attach_cgroup_opts() which enables more precise cgroup-based
|
||||||
|
attachment ordering
|
||||||
|
* automatically take advantage of memory-mappable kernel BTF
|
||||||
|
(/sys/kernel/btf/vmlinux), if supported
|
||||||
|
* emit_strings option for BTF dumper API, improving string-like data printing
|
||||||
|
* add BPF program's func and line info accessors
|
||||||
|
* BPF linker supports linking ELF object files coming from memory buffer and
|
||||||
|
referenced by FD, in addition to file path-based APIs;
|
||||||
|
* small improvements to BTF dedup to handle rare quirky corner cases produces
|
||||||
|
by some compilers
|
||||||
|
* add likely() and unlikely() convenience macros;
|
||||||
|
* __arg_untrusted annotation for BPF global subprog arguments;
|
||||||
|
* bpf_stream_printk() macro for working with BPF streams;
|
||||||
|
* bpf_usdt_arg_size() API
|
||||||
|
- update to 1.6.0:
|
||||||
|
* fixing a possible crash when handling BPF arena global variable relocations
|
||||||
|
- drop 0001-libbpf-Add-identical-pointer-detection-to-btf_dedup_.patch, which
|
||||||
|
is now included
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Thu Jun 5 14:34:05 UTC 2025 - Shung-Hsi Yu <shung-hsi.yu@suse.com>
|
Thu Jun 5 14:34:05 UTC 2025 - Shung-Hsi Yu <shung-hsi.yu@suse.com>
|
||||||
|
|
||||||
- Workaround kernel module size increase due to BTF deduplication
|
- Workaround kernel module size increase due to BTF deduplication
|
||||||
issue since the introduction of TYPEOF_UNQUAL (poo#183503)
|
issue since the introduction of TYPEOF_UNQUAL (poo#183503 bsc#1244135)
|
||||||
* add 0001-libbpf-Add-identical-pointer-detection-to-btf_dedup_.patch
|
* add 0001-libbpf-Add-identical-pointer-detection-to-btf_dedup_.patch
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
|
@@ -19,14 +19,13 @@
|
|||||||
%define sover_major 1
|
%define sover_major 1
|
||||||
%define libname libbpf%{sover_major}
|
%define libname libbpf%{sover_major}
|
||||||
Name: libbpf
|
Name: libbpf
|
||||||
Version: 1.5.1
|
Version: 1.6.1
|
||||||
Release: 0
|
Release: 0
|
||||||
Summary: C library for managing eBPF programs and maps
|
Summary: C library for managing eBPF programs and maps
|
||||||
License: LGPL-2.1-only
|
License: LGPL-2.1-only
|
||||||
URL: https://github.com/libbpf/libbpf
|
URL: https://github.com/libbpf/libbpf
|
||||||
Source: https://github.com/libbpf/libbpf/archive/v%{version}.tar.gz#/%{name}-%{version}.tar.gz
|
Source: https://github.com/libbpf/libbpf/archive/v%{version}.tar.gz#/%{name}-%{version}.tar.gz
|
||||||
Source99: baselibs.conf
|
Source99: baselibs.conf
|
||||||
Patch0: 0001-libbpf-Add-identical-pointer-detection-to-btf_dedup_.patch
|
|
||||||
BuildRequires: libelf-devel
|
BuildRequires: libelf-devel
|
||||||
BuildRequires: linux-glibc-devel >= 4.5
|
BuildRequires: linux-glibc-devel >= 4.5
|
||||||
BuildRequires: zlib-devel
|
BuildRequires: zlib-devel
|
||||||
|
Reference in New Issue
Block a user