[PATCH] perf build: Build error in libbpf missing initialization

From: Thomas Richter
Date: Fri Jul 27 2018 - 04:21:46 EST


In linux-next tree compiling the perf tool with additional make flags
"EXTRA_CFLAGS="-Wp,-D_FORTIFY_SOURCE=2 -O2"
causes a compiler error. It is the warning
'variable may be used uninitialized'
which is treated as error:

I compile it using a FEDORA 28 installation, my gcc compiler version:
gcc (GCC) 8.0.1 20180324 (Red Hat 8.0.1-0.20)

The file that causes the error is tools/lib/bpf/libbpf.c

Here is the error message:

[root@p23lp27] # make V=1 EXTRA_CFLAGS="-Wp,-D_FORTIFY_SOURCE=2 -O2"
[...]
Makefile.config:849: No openjdk development package found, please
install JDK package, e.g. openjdk-8-jdk, java-1.8.0-openjdk-devel
Warning: Kernel ABI header at 'tools/include/uapi/linux/if_link.h'
differs from latest version at 'include/uapi/linux/if_link.h'
CC libbpf.o
libbpf.c: In function âbpf_perf_event_read_simpleâ:
libbpf.c:2342:6: error: âretâ may be used uninitialized in this
function [-Werror=maybe-uninitialized]
int ret;
^
cc1: all warnings being treated as errors
mv: cannot stat './.libbpf.o.tmp': No such file or directory
/home6/tmricht/linux-next/tools/build/Makefile.build:96: recipe for target 'libbpf.o' failed

Fix this warning and add an addition check at the beginning
of the while loop.

Cc: Alexei Starovoitov <ast@xxxxxxxxxx>
Cc: Daniel Borkmann <daniel@xxxxxxxxxxxxx>

Suggested-by: Jakub Kicinski <jakub.kicinski@xxxxxxxxxxxxx>
Signed-off-by: Thomas Richter <tmricht@xxxxxxxxxxxxx>
---
tools/lib/bpf/libbpf.c | 2 ++
1 file changed, 2 insertions(+)

diff --git a/tools/lib/bpf/libbpf.c b/tools/lib/bpf/libbpf.c
index 73465caa33ba..66965ca96113 100644
--- a/tools/lib/bpf/libbpf.c
+++ b/tools/lib/bpf/libbpf.c
@@ -2349,6 +2349,8 @@ bpf_perf_event_read_simple(void *mem, unsigned long size,

begin = base + data_tail % size;
end = base + data_head % size;
+ if (begin == end)
+ return LIBBPF_PERF_EVENT_ERROR;

while (begin != end) {
struct perf_event_header *ehdr;
--
2.16.4