forked from rmandrad/openwrt
-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
1 changed file
with
58 additions
and
0 deletions.
There are no files selected for viewing
58 changes: 58 additions & 0 deletions
58
target/linux/generic/pending-6.6/192-fix-libbpf-Wmaybe-uninitialized.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,58 @@ | ||
From: Sam James <sam@gentoo.org> | ||
Date: Tue, 13 Aug 2024 20:49:06 +0100 | ||
Subject: [PATCH v4] libbpf: workaround -Wmaybe-uninitialized false positive | ||
|
||
In `elf_close`, we get this with GCC 15 -O3 (at least): | ||
``` | ||
In function ‘elf_close’, | ||
inlined from ‘elf_close’ at elf.c:53:6, | ||
inlined from ‘elf_find_func_offset_from_file’ at elf.c:384:2: | ||
elf.c:57:9: warning: ‘elf_fd.elf’ may be used uninitialized | ||
[-Wmaybe-uninitialized] | ||
57 | elf_end(elf_fd->elf); | ||
| ^~~~~~~~~~~~~~~~~~~~ | ||
elf.c: In function ‘elf_find_func_offset_from_file’: | ||
elf.c:377:23: note: ‘elf_fd.elf’ was declared here | ||
377 | struct elf_fd elf_fd; | ||
| ^~~~~~ | ||
In function ‘elf_close’, | ||
inlined from ‘elf_close’ at elf.c:53:6, | ||
inlined from ‘elf_find_func_offset_from_file’ at elf.c:384:2: | ||
elf.c:58:9: warning: ‘elf_fd.fd’ may be used uninitialized | ||
[-Wmaybe-uninitialized] | ||
58 | close(elf_fd->fd); | ||
| ^~~~~~~~~~~~~~~~~ | ||
elf.c: In function ‘elf_find_func_offset_from_file’: | ||
elf.c:377:23: note: ‘elf_fd.fd’ was declared here | ||
377 | struct elf_fd elf_fd; | ||
| ^~~~~~ | ||
``` | ||
|
||
In reality, our use is fine, it's just that GCC doesn't model errno | ||
here (see linked GCC bug). Suppress -Wmaybe-uninitialized accordingly | ||
by initializing elf_fd.fd to -1 and elf_fd.elf to NULL. | ||
|
||
v4: Initialize elf and fd members in elf_open to avoid meddling with | ||
callers. | ||
|
||
Link: https://gcc.gnu.org/PR114952 | ||
Signed-off-by: Sam James <sam@gentoo.org> | ||
Link: https://lore.kernel.org/bpf/14ec488a1cac02794c2fa2b83ae0cef1bce2cb36.1723578546.git.sam@gentoo.org/ | ||
[nstorm.ahoy166@silomails.com: refreshed patch, formatted message, added link and tested] | ||
Signed-off-by: Pavel Shirov <nstorm.ahoy166@silomails.com> | ||
--- | ||
tools/lib/bpf/elf.c | 3 +++ | ||
1 file changed, 3 insertions(+) | ||
|
||
--- a/tools/lib/bpf/elf.c | ||
+++ b/tools/lib/bpf/elf.c | ||
@@ -16,6 +16,9 @@ int elf_open(const char *binary_path, st | ||
int fd, ret; | ||
Elf *elf; | ||
|
||
+ elf_fd->elf = NULL; | ||
+ elf_fd->fd = -1; | ||
+ | ||
if (elf_version(EV_CURRENT) == EV_NONE) { | ||
pr_warn("elf: failed to init libelf for %s\n", binary_path); | ||
return -LIBBPF_ERRNO__LIBELF; |