diff options
author | Yonghong Song <yhs@fb.com> | 2022-03-20 06:20:09 +0300 |
---|---|---|
committer | Alexei Starovoitov <ast@kernel.org> | 2022-03-22 00:46:10 +0300 |
commit | f97b8b9bd630fb76c0e9e11cbf390e3d64a144d7 (patch) | |
tree | b2d9836c69d2e972c826f8d53e7295ed14033a5b /tools | |
parent | e581094167beb674c8a3bc2c27362f50dc5dd617 (diff) | |
download | linux-f97b8b9bd630fb76c0e9e11cbf390e3d64a144d7.tar.xz |
bpftool: Fix a bug in subskeleton code generation
Compiled with clang by adding LLVM=1 both kernel and selftests/bpf
build, I hit the following compilation error:
In file included from /.../tools/testing/selftests/bpf/prog_tests/subskeleton.c:6:
./test_subskeleton_lib.subskel.h:168:6: error: variable 'err' is used uninitialized whenever
'if' condition is true [-Werror,-Wsometimes-uninitialized]
if (!s->progs)
^~~~~~~~~
./test_subskeleton_lib.subskel.h:181:11: note: uninitialized use occurs here
errno = -err;
^~~
./test_subskeleton_lib.subskel.h:168:2: note: remove the 'if' if its condition is always false
if (!s->progs)
^~~~~~~~~~~~~~
The compilation error is triggered by the following code
...
int err;
obj = (struct test_subskeleton_lib *)calloc(1, sizeof(*obj));
if (!obj) {
errno = ENOMEM;
goto err;
}
...
err:
test_subskeleton_lib__destroy(obj);
errno = -err;
...
in test_subskeleton_lib__open(). The 'err' is not initialized, yet it
is used in 'errno = -err' later.
The fix is to remove 'errno = -err' since errno has been set properly
in all incoming branches.
Fixes: 00389c58ffe9 ("bpftool: Add support for subskeletons")
Signed-off-by: Yonghong Song <yhs@fb.com>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Link: https://lore.kernel.org/bpf/20220320032009.3106133-1-yhs@fb.com
Diffstat (limited to 'tools')
-rw-r--r-- | tools/bpf/bpftool/gen.c | 1 |
1 files changed, 0 insertions, 1 deletions
diff --git a/tools/bpf/bpftool/gen.c b/tools/bpf/bpftool/gen.c index 96bd2b33ccf6..7ba7ff55d2ea 100644 --- a/tools/bpf/bpftool/gen.c +++ b/tools/bpf/bpftool/gen.c @@ -1538,7 +1538,6 @@ static int do_subskeleton(int argc, char **argv) return obj; \n\ err: \n\ %1$s__destroy(obj); \n\ - errno = -err; \n\ return NULL; \n\ } \n\ \n\ |