The ima_setup.sh is needed by test_progs test_ima. But the file is missed if we build test_progs separately or installed bpf test to another folder. This patch set fixed the issue in 2 different scenarios.
Hangbin Liu (2): selftests/bpf: Fix build error with ima_setup.sh selftests/bpf: add missed ima_setup.sh in Makefile
tools/testing/selftests/bpf/Makefile | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-)
KP fixed ima_setup.sh missing issue when build test_progs separately with commit 854055c0cf30 ("selftests/bpf: Fix flavored variants of test_ima"). But the fix is incorrect because the build will failed with error:
$ OUTPUT="/tmp/bpf" make test_progs [...] make: *** No rule to make target '/tmp/bpf/ima_setup.sh', needed by 'ima_setup.sh'. Stop.
Fix it by adding a new variable TRUNNER_EXTRA_BUILD to build extra binaries. Left TRUNNER_EXTRA_FILES only for copying files
Fixes: 854055c0cf30 ("selftests/bpf: Fix flavored variants of test_ima") Signed-off-by: Hangbin Liu liuhangbin@gmail.com --- tools/testing/selftests/bpf/Makefile | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-)
diff --git a/tools/testing/selftests/bpf/Makefile b/tools/testing/selftests/bpf/Makefile index 3820608faf57..5944d3a8fff6 100644 --- a/tools/testing/selftests/bpf/Makefile +++ b/tools/testing/selftests/bpf/Makefile @@ -466,10 +466,10 @@ $(TRUNNER_EXTRA_OBJS): $(TRUNNER_OUTPUT)/%.o: \
# non-flavored in-srctree builds receive special treatment, in particular, we # do not need to copy extra resources (see e.g. test_btf_dump_case()) -$(TRUNNER_BINARY)-extras: $(TRUNNER_EXTRA_FILES) | $(TRUNNER_OUTPUT) +$(TRUNNER_BINARY)-extras: $(TRUNNER_EXTRA_BUILD) | $(TRUNNER_OUTPUT) ifneq ($2:$(OUTPUT),:$(shell pwd)) $$(call msg,EXT-COPY,$(TRUNNER_BINARY),$(TRUNNER_EXTRA_FILES)) - $(Q)rsync -aq $$^ $(TRUNNER_OUTPUT)/ + $(Q)rsync -aq $(TRUNNER_EXTRA_FILES) $(TRUNNER_OUTPUT)/ endif
$(OUTPUT)/$(TRUNNER_BINARY): $(TRUNNER_TEST_OBJS) \ @@ -490,9 +490,9 @@ TRUNNER_EXTRA_SOURCES := test_progs.c cgroup_helpers.c trace_helpers.c \ network_helpers.c testing_helpers.c \ btf_helpers.c flow_dissector_load.h \ cap_helpers.c -TRUNNER_EXTRA_FILES := $(OUTPUT)/urandom_read $(OUTPUT)/bpf_testmod.ko \ - ima_setup.sh \ +TRUNNER_EXTRA_BUILD := $(OUTPUT)/urandom_read $(OUTPUT)/bpf_testmod.ko \ $(wildcard progs/btf_dump_test_case_*.c) +TRUNNER_EXTRA_FILES := $(TRUNNER_EXTRA_BUILD) ima_setup.sh TRUNNER_BPF_BUILD_RULE := CLANG_BPF_BUILD_RULE TRUNNER_BPF_CFLAGS := $(BPF_CFLAGS) $(CLANG_CFLAGS) -DENABLE_ATOMICS_TESTS $(eval $(call DEFINE_TEST_RUNNER,test_progs)) @@ -513,6 +513,7 @@ endif TRUNNER_TESTS_DIR := map_tests TRUNNER_BPF_PROGS_DIR := progs TRUNNER_EXTRA_SOURCES := test_maps.c +TRUNNER_EXTRA_BUILD := TRUNNER_EXTRA_FILES := TRUNNER_BPF_BUILD_RULE := $$(error no BPF objects should be built) TRUNNER_BPF_CFLAGS :=
On Thu, May 12, 2022 at 12:18 AM Hangbin Liu liuhangbin@gmail.com wrote:
KP fixed ima_setup.sh missing issue when build test_progs separately with commit 854055c0cf30 ("selftests/bpf: Fix flavored variants of test_ima"). But the fix is incorrect because the build will failed with error:
$ OUTPUT="/tmp/bpf" make test_progs [...] make: *** No rule to make target '/tmp/bpf/ima_setup.sh', needed by 'ima_setup.sh'. Stop.
Fix it by adding a new variable TRUNNER_EXTRA_BUILD to build extra binaries. Left TRUNNER_EXTRA_FILES only for copying files
Fixes: 854055c0cf30 ("selftests/bpf: Fix flavored variants of test_ima") Signed-off-by: Hangbin Liu liuhangbin@gmail.com
tools/testing/selftests/bpf/Makefile | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-)
diff --git a/tools/testing/selftests/bpf/Makefile b/tools/testing/selftests/bpf/Makefile index 3820608faf57..5944d3a8fff6 100644 --- a/tools/testing/selftests/bpf/Makefile +++ b/tools/testing/selftests/bpf/Makefile @@ -466,10 +466,10 @@ $(TRUNNER_EXTRA_OBJS): $(TRUNNER_OUTPUT)/%.o: \
# non-flavored in-srctree builds receive special treatment, in particular, we # do not need to copy extra resources (see e.g. test_btf_dump_case()) -$(TRUNNER_BINARY)-extras: $(TRUNNER_EXTRA_FILES) | $(TRUNNER_OUTPUT) +$(TRUNNER_BINARY)-extras: $(TRUNNER_EXTRA_BUILD) | $(TRUNNER_OUTPUT) ifneq ($2:$(OUTPUT),:$(shell pwd)) $$(call msg,EXT-COPY,$(TRUNNER_BINARY),$(TRUNNER_EXTRA_FILES))
$(Q)rsync -aq $$^ $(TRUNNER_OUTPUT)/
$(Q)rsync -aq $(TRUNNER_EXTRA_FILES) $(TRUNNER_OUTPUT)/
endif
$(OUTPUT)/$(TRUNNER_BINARY): $(TRUNNER_TEST_OBJS) \ @@ -490,9 +490,9 @@ TRUNNER_EXTRA_SOURCES := test_progs.c cgroup_helpers.c trace_helpers.c \ network_helpers.c testing_helpers.c \ btf_helpers.c flow_dissector_load.h \ cap_helpers.c -TRUNNER_EXTRA_FILES := $(OUTPUT)/urandom_read $(OUTPUT)/bpf_testmod.ko \
ima_setup.sh \
+TRUNNER_EXTRA_BUILD := $(OUTPUT)/urandom_read $(OUTPUT)/bpf_testmod.ko \ $(wildcard progs/btf_dump_test_case_*.c)
note that progs/btf_dump_test_case_*.c are not built, they are just copied over (C source files), so I don't think this fix is necessary.
btw, I tried running `OUTPUT="/tmp/bpf" make test_progs` and it didn't error out. But tbh, I'd recommend building everything instead of building individual targets.
+TRUNNER_EXTRA_FILES := $(TRUNNER_EXTRA_BUILD) ima_setup.sh TRUNNER_BPF_BUILD_RULE := CLANG_BPF_BUILD_RULE TRUNNER_BPF_CFLAGS := $(BPF_CFLAGS) $(CLANG_CFLAGS) -DENABLE_ATOMICS_TESTS $(eval $(call DEFINE_TEST_RUNNER,test_progs)) @@ -513,6 +513,7 @@ endif TRUNNER_TESTS_DIR := map_tests TRUNNER_BPF_PROGS_DIR := progs TRUNNER_EXTRA_SOURCES := test_maps.c +TRUNNER_EXTRA_BUILD := TRUNNER_EXTRA_FILES := TRUNNER_BPF_BUILD_RULE := $$(error no BPF objects should be built) TRUNNER_BPF_CFLAGS := -- 2.35.1
On Fri, May 13, 2022 at 02:58:05PM -0700, Andrii Nakryiko wrote:
-TRUNNER_EXTRA_FILES := $(OUTPUT)/urandom_read $(OUTPUT)/bpf_testmod.ko \
ima_setup.sh \
+TRUNNER_EXTRA_BUILD := $(OUTPUT)/urandom_read $(OUTPUT)/bpf_testmod.ko \ $(wildcard progs/btf_dump_test_case_*.c)
note that progs/btf_dump_test_case_*.c are not built, they are just copied over (C source files), so I don't think this fix is necessary.
btw, I tried running `OUTPUT="/tmp/bpf" make test_progs` and it didn't error out. But tbh, I'd recommend building everything instead of building individual targets.
After update the code to latest bpf-next. It works this time, the ima_setup.sh was copied to target folder correctly.
EXT-COPY [test_progs] urandom_read bpf_testmod.ko liburandom_read.so ima_setup.sh btf_dump_test_case_bitfields.c btf_dump_test_case_multidim.c btf_dump_test_case_namespacing.c btf_dump_test_case_ordering.c btf_dump_test_case_packing.c btf_dump_test_case_padding.c btf_dump_test_case_syntax.c BINARY test_progs
Not sure why the previous kernel doesn't work. But anyway I will drop this patch.
On the other hand, when I build with latest bpf-next. I got error like:
""" # OUTPUT="/tmp/bpf" make test_progs BINARY urandom_read gcc -g -O0 -rdynamic -Wall -Werror -DHAVE_GENHDR -I/home/net/tools/testing/selftests/bpf -I/tmp/bpf/tools/include -I/home/net/include/generated -I/home/net/tools/lib -I/home/net/tools/include -I/home/net/tools/include/uapi -I/tmp/bpf urandom_read.c urandom_read_aux.c \ liburandom_read.so -lelf -lz -lrt -lpthread \ -Wl,-rpath=. -Wl,--build-id=sha1 -o /tmp/bpf/urandom_read /usr/bin/ld: cannot find liburandom_read.so: No such file or directory collect2: error: ld returned 1 exit status make: *** [Makefile:177: /tmp/bpf/urandom_read] Error 1
# ls /tmp/bpf/liburandom_read.so /tmp/bpf/liburandom_read.so """
after I copy to liburandom_read.so back to tools/testing/selftests/bpf the build success.
""" # cp /tmp/bpf/liburandom_read.so /home/net/tools/testing/selftests/bpf/ # gcc -g -O0 -rdynamic -Wall -Werror -DHAVE_GENHDR -I/home/net/tools/testing/selftests/bpf -I/tmp/bpf/tools/include -I/home/net/include/generated -I/home/net/tools/lib -I/home/net/tools/include -I/home/net/tools/include/uapi -I/tmp/bpf urandom_read.c urandom_read_aux.c liburandom_read.so -lelf -lz -lrt -lpthread -Wl,-rpath=. -Wl,--build-id=sha1 -o /tmp/bpf/urandom_read # echo $? 0 """
Do you know why this happens?
Thanks Hangbin
On Sun, May 15, 2022 at 8:53 PM Hangbin Liu liuhangbin@gmail.com wrote:
On Fri, May 13, 2022 at 02:58:05PM -0700, Andrii Nakryiko wrote:
-TRUNNER_EXTRA_FILES := $(OUTPUT)/urandom_read $(OUTPUT)/bpf_testmod.ko \
ima_setup.sh \
+TRUNNER_EXTRA_BUILD := $(OUTPUT)/urandom_read $(OUTPUT)/bpf_testmod.ko \ $(wildcard progs/btf_dump_test_case_*.c)
note that progs/btf_dump_test_case_*.c are not built, they are just copied over (C source files), so I don't think this fix is necessary.
btw, I tried running `OUTPUT="/tmp/bpf" make test_progs` and it didn't error out. But tbh, I'd recommend building everything instead of building individual targets.
After update the code to latest bpf-next. It works this time, the ima_setup.sh was copied to target folder correctly.
EXT-COPY [test_progs] urandom_read bpf_testmod.ko liburandom_read.so ima_setup.sh btf_dump_test_case_bitfields.c btf_dump_test_case_multidim.c btf_dump_test_case_namespacing.c btf_dump_test_case_ordering.c btf_dump_test_case_packing.c btf_dump_test_case_padding.c btf_dump_test_case_syntax.c BINARY test_progs
Not sure why the previous kernel doesn't work. But anyway I will drop this patch.
On the other hand, when I build with latest bpf-next. I got error like:
""" # OUTPUT="/tmp/bpf" make test_progs BINARY urandom_read gcc -g -O0 -rdynamic -Wall -Werror -DHAVE_GENHDR -I/home/net/tools/testing/selftests/bpf -I/tmp/bpf/tools/include -I/home/net/include/generated -I/home/net/tools/lib -I/home/net/tools/include -I/home/net/tools/include/uapi -I/tmp/bpf urandom_read.c urandom_read_aux.c \ liburandom_read.so -lelf -lz -lrt -lpthread \ -Wl,-rpath=. -Wl,--build-id=sha1 -o /tmp/bpf/urandom_read
we assume liburandom_read.so is going to be under selftests/bpf here, but it's actually under $(OUTPUT)/
Can you try $(OUTPUT)/liburandom_read.so? I suspect this might break -rpath=., though, but let's try this first?
/usr/bin/ld: cannot find liburandom_read.so: No such file or directory collect2: error: ld returned 1 exit status make: *** [Makefile:177: /tmp/bpf/urandom_read] Error 1
# ls /tmp/bpf/liburandom_read.so /tmp/bpf/liburandom_read.so """
after I copy to liburandom_read.so back to tools/testing/selftests/bpf the build success.
""" # cp /tmp/bpf/liburandom_read.so /home/net/tools/testing/selftests/bpf/ # gcc -g -O0 -rdynamic -Wall -Werror -DHAVE_GENHDR -I/home/net/tools/testing/selftests/bpf -I/tmp/bpf/tools/include -I/home/net/include/generated -I/home/net/tools/lib -I/home/net/tools/include -I/home/net/tools/include/uapi -I/tmp/bpf urandom_read.c urandom_read_aux.c liburandom_read.so -lelf -lz -lrt -lpthread -Wl,-rpath=. -Wl,--build-id=sha1 -o /tmp/bpf/urandom_read # echo $? 0 """
Do you know why this happens?
Thanks Hangbin
On Wed, May 18, 2022 at 03:36:53PM -0700, Andrii Nakryiko wrote:
On Fri, May 13, 2022 at 02:58:05PM -0700, Andrii Nakryiko wrote:
-TRUNNER_EXTRA_FILES := $(OUTPUT)/urandom_read $(OUTPUT)/bpf_testmod.ko \
ima_setup.sh \
+TRUNNER_EXTRA_BUILD := $(OUTPUT)/urandom_read $(OUTPUT)/bpf_testmod.ko \ $(wildcard progs/btf_dump_test_case_*.c)
note that progs/btf_dump_test_case_*.c are not built, they are just copied over (C source files), so I don't think this fix is necessary.
btw, I tried running `OUTPUT="/tmp/bpf" make test_progs` and it didn't error out. But tbh, I'd recommend building everything instead of building individual targets.
After update the code to latest bpf-next. It works this time, the ima_setup.sh was copied to target folder correctly.
EXT-COPY [test_progs] urandom_read bpf_testmod.ko liburandom_read.so ima_setup.sh btf_dump_test_case_bitfields.c btf_dump_test_case_multidim.c btf_dump_test_case_namespacing.c btf_dump_test_case_ordering.c btf_dump_test_case_packing.c btf_dump_test_case_padding.c btf_dump_test_case_syntax.c BINARY test_progs
Not sure why the previous kernel doesn't work. But anyway I will drop this patch.
On the other hand, when I build with latest bpf-next. I got error like:
""" # OUTPUT="/tmp/bpf" make test_progs BINARY urandom_read gcc -g -O0 -rdynamic -Wall -Werror -DHAVE_GENHDR -I/home/net/tools/testing/selftests/bpf -I/tmp/bpf/tools/include -I/home/net/include/generated -I/home/net/tools/lib -I/home/net/tools/include -I/home/net/tools/include/uapi -I/tmp/bpf urandom_read.c urandom_read_aux.c \ liburandom_read.so -lelf -lz -lrt -lpthread \ -Wl,-rpath=. -Wl,--build-id=sha1 -o /tmp/bpf/urandom_read
we assume liburandom_read.so is going to be under selftests/bpf here, but it's actually under $(OUTPUT)/
Can you try $(OUTPUT)/liburandom_read.so? I suspect this might break -rpath=., though, but let's try this first?
Sigh.. After rebase to latest bpf-next, to make clean and re-do `OUTPUT="/tmp/bpf" make test_progs`, There is no liburandom_read.so build issue but the ima_setup.sh error come up again...
LINK resolve_btfids LIB liburandom_read.so BINARY urandom_read MOD bpf_testmod.ko CC [M] /home/net/tools/testing/selftests/bpf/bpf_testmod/bpf_testmod.o MODPOST /home/net/tools/testing/selftests/bpf/bpf_testmod/Module.symvers CC [M] /home/net/tools/testing/selftests/bpf/bpf_testmod/bpf_testmod.mod.o LD [M] /home/net/tools/testing/selftests/bpf/bpf_testmod/bpf_testmod.ko BTF [M] /home/net/tools/testing/selftests/bpf/bpf_testmod/bpf_testmod.ko make: *** No rule to make target '/tmp/bpf/ima_setup.sh', needed by 'ima_setup.sh'. Stop.
Not sure if it's a build environment setup issue or others.
Hangbin
On Wed, May 18, 2022 at 7:44 PM Hangbin Liu liuhangbin@gmail.com wrote:
On Wed, May 18, 2022 at 03:36:53PM -0700, Andrii Nakryiko wrote:
On Fri, May 13, 2022 at 02:58:05PM -0700, Andrii Nakryiko wrote:
-TRUNNER_EXTRA_FILES := $(OUTPUT)/urandom_read $(OUTPUT)/bpf_testmod.ko \
ima_setup.sh \
+TRUNNER_EXTRA_BUILD := $(OUTPUT)/urandom_read $(OUTPUT)/bpf_testmod.ko \ $(wildcard progs/btf_dump_test_case_*.c)
note that progs/btf_dump_test_case_*.c are not built, they are just copied over (C source files), so I don't think this fix is necessary.
btw, I tried running `OUTPUT="/tmp/bpf" make test_progs` and it didn't error out. But tbh, I'd recommend building everything instead of building individual targets.
After update the code to latest bpf-next. It works this time, the ima_setup.sh was copied to target folder correctly.
EXT-COPY [test_progs] urandom_read bpf_testmod.ko liburandom_read.so ima_setup.sh btf_dump_test_case_bitfields.c btf_dump_test_case_multidim.c btf_dump_test_case_namespacing.c btf_dump_test_case_ordering.c btf_dump_test_case_packing.c btf_dump_test_case_padding.c btf_dump_test_case_syntax.c BINARY test_progs
Not sure why the previous kernel doesn't work. But anyway I will drop this patch.
On the other hand, when I build with latest bpf-next. I got error like:
""" # OUTPUT="/tmp/bpf" make test_progs BINARY urandom_read gcc -g -O0 -rdynamic -Wall -Werror -DHAVE_GENHDR -I/home/net/tools/testing/selftests/bpf -I/tmp/bpf/tools/include -I/home/net/include/generated -I/home/net/tools/lib -I/home/net/tools/include -I/home/net/tools/include/uapi -I/tmp/bpf urandom_read.c urandom_read_aux.c \ liburandom_read.so -lelf -lz -lrt -lpthread \ -Wl,-rpath=. -Wl,--build-id=sha1 -o /tmp/bpf/urandom_read
we assume liburandom_read.so is going to be under selftests/bpf here, but it's actually under $(OUTPUT)/
Can you try $(OUTPUT)/liburandom_read.so? I suspect this might break -rpath=., though, but let's try this first?
Sigh.. After rebase to latest bpf-next, to make clean and re-do `OUTPUT="/tmp/bpf" make test_progs`, There is no liburandom_read.so build issue but the ima_setup.sh error come up again...
LINK resolve_btfids LIB liburandom_read.so BINARY urandom_read MOD bpf_testmod.ko CC [M] /home/net/tools/testing/selftests/bpf/bpf_testmod/bpf_testmod.o MODPOST /home/net/tools/testing/selftests/bpf/bpf_testmod/Module.symvers CC [M] /home/net/tools/testing/selftests/bpf/bpf_testmod/bpf_testmod.mod.o LD [M] /home/net/tools/testing/selftests/bpf/bpf_testmod/bpf_testmod.ko BTF [M] /home/net/tools/testing/selftests/bpf/bpf_testmod/bpf_testmod.ko make: *** No rule to make target '/tmp/bpf/ima_setup.sh', needed by 'ima_setup.sh'. Stop.
Not sure if it's a build environment setup issue or others.
I don't use OUTPUT when building selftests and see no issues, so this must be related. If you care about OUTPUT working please try to debug and figure this out.
Hangbin
When build bpf test and install it to another folder, e.g.
make -j10 install -C tools/testing/selftests/ TARGETS="bpf" \ SKIP_TARGETS="" INSTALL_PATH=/tmp/kselftests
The ima_setup.sh is missed in target folder, which makes test_ima failed.
Fix it by adding ima_setup.sh to TEST_PROGS_EXTENDED.
Fixes: 34b82d3ac105 ("bpf: Add a selftest for bpf_ima_inode_hash") Signed-off-by: Hangbin Liu liuhangbin@gmail.com --- tools/testing/selftests/bpf/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tools/testing/selftests/bpf/Makefile b/tools/testing/selftests/bpf/Makefile index 5944d3a8fff6..b4fd1352a2ac 100644 --- a/tools/testing/selftests/bpf/Makefile +++ b/tools/testing/selftests/bpf/Makefile @@ -75,7 +75,7 @@ TEST_PROGS := test_kmod.sh \ test_xsk.sh
TEST_PROGS_EXTENDED := with_addr.sh \ - with_tunnels.sh \ + with_tunnels.sh ima_setup.sh \ test_xdp_vlan.sh test_bpftool.py
# Compile but not part of 'make run_tests'
On Thu, May 12, 2022 at 12:18 AM Hangbin Liu liuhangbin@gmail.com wrote:
The ima_setup.sh is needed by test_progs test_ima. But the file is missed if we build test_progs separately or installed bpf test to another folder. This patch set fixed the issue in 2 different scenarios.
Patch subject is incorrect. Please use [PATCH bpf-next].
linux-kselftest-mirror@lists.linaro.org