Kees Cook keescook@chromium.org writes:
On Mon, Sep 14, 2020 at 10:15:18PM +1000, Michael Ellerman wrote:
Kees Cook keescook@chromium.org writes:
Hi,
This refactors the seccomp selftest macros used in change_syscall(), in an effort to remove special cases for mips, arm, arm64, and xtensa, which paves the way for powerpc fixes.
I'm not entirely done testing, but all-arch build tests and x86_64 selftests pass. I'll be doing arm, arm64, and i386 selftests shortly, but I currently don't have an easy way to check xtensa, mips, nor powerpc. Any help there would be appreciated!
The series builds fine for me, and all the tests pass (see below).
Thanks for picking up those changes to deal with powerpc being oddball.
Tested-by: Michael Ellerman mpe@ellerman.id.au (powerpc)
Awesome; thanks!
However...
./seccomp_bpf TAP version 13 1..86 # Starting 86 tests from 7 test cases. # RUN global.kcmp ... # OK global.kcmp ok 1 global.kcmp [...] # RUN global.KILL_thread ... TAP version 13 1..86 # Starting 86 tests from 7 test cases.
Was this a mis-paste, or has something very very bad happened here in global.KILL_one_arg_six finishes?
...
TAP version 13 1..86 # Starting 86 tests from 7 test cases. [...] # PASSED: 86 / 86 tests passed. # Totals: pass:86 fail:0 xfail:0 xpass:0 skip:0 error:0
And after every user_notification test? O_O
Haha, I thought that was normal :)
It's because of redirection, I run the tests with:
find . -executable -type f -print -execdir '{}' ';' | tee test.log
If I just run it directly on the terminal everything is normal.
It'll be fork() vs libc buffering.
I can fix it with:
$ stdbuf -oL ./seccomp_bpf | tee test.log
Or the patch below.
I can send a proper patch for that tomorrow, I don't know that harness code, but I think that's the right fix.
cheers
diff --git a/tools/testing/selftests/kselftest_harness.h b/tools/testing/selftests/kselftest_harness.h index 4f78e4805633..b1bd00ff3d94 100644 --- a/tools/testing/selftests/kselftest_harness.h +++ b/tools/testing/selftests/kselftest_harness.h @@ -971,6 +971,7 @@ void __run_test(struct __fixture_metadata *f,
ksft_print_msg(" RUN %s%s%s.%s ...\n", f->name, variant->name[0] ? "." : "", variant->name, t->name); + fflush(stdout); t->pid = fork(); if (t->pid < 0) { ksft_print_msg("ERROR SPAWNING TEST CHILD\n");