On Fri, Oct 25, 2024 at 10:50:05AM +0800, Luming Yu wrote: > On Thu, Oct 24, 2024 at 04:43:04PM +0800, Luming Yu wrote: > > On Wed, Oct 23, 2024 at 12:53:47PM +1100, Michael Ellerman wrote: > > > "虞陆铭" <luming...@shingroup.cn> writes: > > > >>Le 12/10/2024 à 05:56, Luming Yu a écrit : > > > >>> convert powerpc entry code in syscall and fault to use syscall_work > > > >>> and irqentry_state as well as common calls implemented in generic > > > >>> entry infrastructure. > > > >>> > > > >>> Signed-off-by: Luming Yu <luming...@shingroup.cn> > > > >>> --- > > > >>> arch/powerpc/Kconfig | 1 + > > > >>> arch/powerpc/include/asm/hw_irq.h | 5 +++++ > > > >>> arch/powerpc/include/asm/processor.h | 6 ++++++ > > > >>> arch/powerpc/include/asm/syscall.h | 5 +++++ > > > >>> arch/powerpc/include/asm/thread_info.h | 1 + > > > >>> arch/powerpc/kernel/syscall.c | 5 ++++- > > > >>> arch/powerpc/mm/fault.c | 3 +++ > > > >>> 7 files changed, 25 insertions(+), 1 deletion(-) > > > >>> > > > >> > > > >>... > > > >> > > > >>> diff --git a/arch/powerpc/kernel/syscall.c > > > >>> b/arch/powerpc/kernel/syscall.c > > > >>> index 77fedb190c93..e0338bd8d383 100644 > > > >>> --- a/arch/powerpc/kernel/syscall.c > > > >>> +++ b/arch/powerpc/kernel/syscall.c > > > >>> @@ -3,6 +3,7 @@ > > > >>> #include <linux/compat.h> > > > >>> #include <linux/context_tracking.h> > > > >>> #include <linux/randomize_kstack.h> > > > >>> +#include <linux/entry-common.h> > > > >>> > > > >>> #include <asm/interrupt.h> > > > >>> #include <asm/kup.h> > > > >>> @@ -131,7 +132,7 @@ notrace long system_call_exception(struct pt_regs > > > >>> *regs, unsigned long r0) > > > >>> * and the test against NR_syscalls will fail and the > > > >>> return > > > >>> * value to be used is in regs->gpr[3]. > > > >>> */ > > > >>> - r0 = do_syscall_trace_enter(regs); > > > >>> + r0 = syscall_enter_from_user_mode(regs, r0); > > > >> > > > >>Can you provide details on how this works ? > > > > I assume the common entry would take over th details. > > > > So I just made the switch from the high level call. > > > > > > > As you said as the subtle ABI requirement about regs->r3 needs to > > > > be restored, I'm wondering which test can capture the lost > > > > ABI feature. As simple Boot test is insufficient, what is the test set > > > > that can capture it? > > > > > > The seccomp selftest did exercise it back when I originally wrote that > > > code. I don't know for sure that it still does, but that would be a good > > > start. > > > > > > It's in tools/testing/selftests/seccomp/ > > Thanks for the hint. > > It seems to be running into some not ok cases the way hits the bpf test > > that doesn't return. > > I will re-run with the same kernel w/o the patch-set to sort out the cases > > that could be > > caused by the patch Then I will try to debug out the root cause. > w/o the patch set, all ok, as below. So, it would great if the test of > feature can be used in > linux-ci github workflow. And I'm clear what needs to be done in v2 now. Despite being pulled to another urgent business for a while, I managed to sequeeze resource and find the clue for the root cause that is a ppc specific test against a flag in thread info. By yanking out the ppc specific test as below, the most seccomp_bpf test run successfully w/ the patch set.
diff --git a/arch/powerpc/kernel/syscall.c b/arch/powerpc/kernel/syscall.c index dabe7f2b4bd4..2fa517160ef3 100644 --- a/arch/powerpc/kernel/syscall.c +++ b/arch/powerpc/kernel/syscall.c @@ -119,7 +119,7 @@ notrace long system_call_exception(struct pt_regs *regs, unsigned long r0) local_irq_enable(); - if (unlikely(read_thread_flags() & _TIF_SYSCALL_DOTRACE)) { + if (1/*unlikely(read_thread_flags() & _TIF_SYSCALL_DOTRACE)*/) { if (unlikely(trap_is_unsupported_scv(regs))) { /* Unsupported scv vector */ _exception(SIGILL, regs, ILL_ILLOPC, regs->nip); Let me clean it up a little bit more then I will send out patch update soon. > [root@10 linux-ci]# make -C tools/testing/selftests TARGETS=seccomp run_tests > make: Entering directory '/root/linux-ci/tools/testing/selftests' > make[1]: Nothing to be done for 'all'. > TAP version 13 > 1..2 > # timeout set to 180 > # selftests: seccomp: seccomp_bpf > # TAP version 13 > # 1..98 > # # Starting 98 tests from 8 test cases. > # # RUN global.kcmp ... > # # OK global.kcmp > # ok 1 global.kcmp > # # RUN global.mode_strict_support ... > # # OK global.mode_strict_support > # ok 2 global.mode_strict_support > # # RUN global.mode_strict_cannot_call_prctl ... > # # OK global.mode_strict_cannot_call_prctl > # ok 3 global.mode_strict_cannot_call_prctl > # # RUN global.no_new_privs_support ... > # # OK global.no_new_privs_support > # ok 4 global.no_new_privs_support > # # RUN global.mode_filter_support ... > # # OK global.mode_filter_support > # ok 5 global.mode_filter_support > # # RUN global.mode_filter_without_nnp ... > # # OK global.mode_filter_without_nnp > # ok 6 global.mode_filter_without_nnp > # # RUN global.filter_size_limits ... > # # OK global.filter_size_limits > # ok 7 global.filter_size_limits > # # RUN global.filter_chain_limits ... > # # OK global.filter_chain_limits > # ok 8 global.filter_chain_limits > # # RUN global.mode_filter_cannot_move_to_strict ... > # # OK global.mode_filter_cannot_move_to_strict > # ok 9 global.mode_filter_cannot_move_to_strict > # # RUN global.mode_filter_get_seccomp ... > # # OK global.mode_filter_get_seccomp > # ok 10 global.mode_filter_get_seccomp > # # RUN global.ALLOW_all ... > # # OK global.ALLOW_all > # ok 11 global.ALLOW_all > # # RUN global.empty_prog ... > # # OK global.empty_prog > # ok 12 global.empty_prog > # # RUN global.log_all ... > # # OK global.log_all > # ok 13 global.log_all > # # RUN global.unknown_ret_is_kill_inside ... > # # OK global.unknown_ret_is_kill_inside > # ok 14 global.unknown_ret_is_kill_inside > # # RUN global.unknown_ret_is_kill_above_allow ... > # # OK global.unknown_ret_is_kill_above_allow > # ok 15 global.unknown_ret_is_kill_above_allow > # # RUN global.KILL_all ... > # # OK global.KILL_all > # ok 16 global.KILL_all > # # RUN global.KILL_one ... > # # OK global.KILL_one > # ok 17 global.KILL_one > # # RUN global.KILL_one_arg_one ... > # # OK global.KILL_one_arg_one > # ok 18 global.KILL_one_arg_one > # # RUN global.KILL_one_arg_six ... > # # OK global.KILL_one_arg_six > # ok 19 global.KILL_one_arg_six > # # RUN global.KILL_thread ... > # # OK global.KILL_thread > # ok 20 global.KILL_thread > # # RUN global.KILL_process ... > # # OK global.KILL_process > # ok 21 global.KILL_process > # # RUN global.KILL_unknown ... > # # OK global.KILL_unknown > # ok 22 global.KILL_unknown > # # RUN global.arg_out_of_range ... > # # OK global.arg_out_of_range > # ok 23 global.arg_out_of_range > # # RUN global.ERRNO_valid ... > # # OK global.ERRNO_valid > # ok 24 global.ERRNO_valid > # # RUN global.ERRNO_zero ... > # # OK global.ERRNO_zero > # ok 25 global.ERRNO_zero > # # RUN global.ERRNO_capped ... > # # OK global.ERRNO_capped > # ok 26 global.ERRNO_capped > # # RUN global.ERRNO_order ... > # # OK global.ERRNO_order > # ok 27 global.ERRNO_order > # # RUN global.negative_ENOSYS ... > # # OK global.negative_ENOSYS > # ok 28 global.negative_ENOSYS > # # RUN global.seccomp_syscall ... > # # OK global.seccomp_syscall > # ok 29 global.seccomp_syscall > # # RUN global.seccomp_syscall_mode_lock ... > # # OK global.seccomp_syscall_mode_lock > # ok 30 global.seccomp_syscall_mode_lock > # # RUN global.detect_seccomp_filter_flags ... > # # OK global.detect_seccomp_filter_flags > # ok 31 global.detect_seccomp_filter_flags > # # RUN global.TSYNC_first ... > # # OK global.TSYNC_first > # ok 32 global.TSYNC_first > # # RUN global.syscall_restart ... > # # OK global.syscall_restart > # ok 33 global.syscall_restart > # # RUN global.filter_flag_log ... > # # OK global.filter_flag_log > # ok 34 global.filter_flag_log > # # RUN global.get_action_avail ... > # # OK global.get_action_avail > # ok 35 global.get_action_avail > # # RUN global.get_metadata ... > # # OK global.get_metadata > # ok 36 global.get_metadata > # # RUN global.user_notification_basic ... > # # OK global.user_notification_basic > # ok 37 global.user_notification_basic > # # RUN global.user_notification_with_tsync ... > # # OK global.user_notification_with_tsync > # ok 38 global.user_notification_with_tsync > # # RUN global.user_notification_kill_in_middle ... > # # OK global.user_notification_kill_in_middle > # ok 39 global.user_notification_kill_in_middle > # # RUN global.user_notification_signal ... > # # OK global.user_notification_signal > # ok 40 global.user_notification_signal > # # RUN global.user_notification_closed_listener ... > # # OK global.user_notification_closed_listener > # ok 41 global.user_notification_closed_listener > # # RUN global.user_notification_child_pid_ns ... > # # OK global.user_notification_child_pid_ns > # ok 42 global.user_notification_child_pid_ns > # # RUN global.user_notification_sibling_pid_ns ... > # # OK global.user_notification_sibling_pid_ns > # ok 43 global.user_notification_sibling_pid_ns > # # RUN global.user_notification_fault_recv ... > # # OK global.user_notification_fault_recv > # ok 44 global.user_notification_fault_recv > # # RUN global.seccomp_get_notif_sizes ... > # # OK global.seccomp_get_notif_sizes > # ok 45 global.seccomp_get_notif_sizes > # # RUN global.user_notification_continue ... > # # OK global.user_notification_continue > # ok 46 global.user_notification_continue > # # RUN global.user_notification_filter_empty ... > # # OK global.user_notification_filter_empty > # ok 47 global.user_notification_filter_empty > # # RUN global.user_ioctl_notification_filter_empty ... > # # OK global.user_ioctl_notification_filter_empty > # ok 48 global.user_ioctl_notification_filter_empty > # # RUN global.user_notification_filter_empty_threaded ... > # # OK global.user_notification_filter_empty_threaded > # ok 49 global.user_notification_filter_empty_threaded > # # RUN global.user_notification_addfd ... > # # OK global.user_notification_addfd > # ok 50 global.user_notification_addfd > # # RUN global.user_notification_addfd_rlimit ... > # # OK global.user_notification_addfd_rlimit > # ok 51 global.user_notification_addfd_rlimit > # # RUN global.user_notification_sync ... > # # OK global.user_notification_sync > # ok 52 global.user_notification_sync > # # RUN global.user_notification_fifo ... > # # OK global.user_notification_fifo > # ok 53 global.user_notification_fifo > # # RUN global.user_notification_wait_killable_pre_notification ... > # # OK global.user_notification_wait_killable_pre_notification > # ok 54 global.user_notification_wait_killable_pre_notification > # # RUN global.user_notification_wait_killable ... > # # OK global.user_notification_wait_killable > # ok 55 global.user_notification_wait_killable > # # RUN global.user_notification_wait_killable_fatal ... > # # OK global.user_notification_wait_killable_fatal > # ok 56 global.user_notification_wait_killable_fatal > # # RUN global.tsync_vs_dead_thread_leader ... > # # OK global.tsync_vs_dead_thread_leader > # ok 57 global.tsync_vs_dead_thread_leader > # # RUN TRAP.dfl ... > # # OK TRAP.dfl > # ok 58 TRAP.dfl > # # RUN TRAP.ign ... > # # OK TRAP.ign > # ok 59 TRAP.ign > # # RUN TRAP.handler ... > # # OK TRAP.handler > # ok 60 TRAP.handler > # # RUN precedence.allow_ok ... > # # OK precedence.allow_ok > # ok 61 precedence.allow_ok > # # RUN precedence.kill_is_highest ... > # # OK precedence.kill_is_highest > # ok 62 precedence.kill_is_highest > # # RUN precedence.kill_is_highest_in_any_order ... > # # OK precedence.kill_is_highest_in_any_order > # ok 63 precedence.kill_is_highest_in_any_order > # # RUN precedence.trap_is_second ... > # # OK precedence.trap_is_second > # ok 64 precedence.trap_is_second > # # RUN precedence.trap_is_second_in_any_order ... > # # OK precedence.trap_is_second_in_any_order > # ok 65 precedence.trap_is_second_in_any_order > # # RUN precedence.errno_is_third ... > # # OK precedence.errno_is_third > # ok 66 precedence.errno_is_third > # # RUN precedence.errno_is_third_in_any_order ... > # # OK precedence.errno_is_third_in_any_order > # ok 67 precedence.errno_is_third_in_any_order > # # RUN precedence.trace_is_fourth ... > # # OK precedence.trace_is_fourth > # ok 68 precedence.trace_is_fourth > # # RUN precedence.trace_is_fourth_in_any_order ... > # # OK precedence.trace_is_fourth_in_any_order > # ok 69 precedence.trace_is_fourth_in_any_order > # # RUN precedence.log_is_fifth ... > # # OK precedence.log_is_fifth > # ok 70 precedence.log_is_fifth > # # RUN precedence.log_is_fifth_in_any_order ... > # # OK precedence.log_is_fifth_in_any_order > # ok 71 precedence.log_is_fifth_in_any_order > # # RUN TRACE_poke.read_has_side_effects ... > # # OK TRACE_poke.read_has_side_effects > # ok 72 TRACE_poke.read_has_side_effects > # # RUN TRACE_poke.getpid_runs_normally ... > # # OK TRACE_poke.getpid_runs_normally > # ok 73 TRACE_poke.getpid_runs_normally > # # RUN TRACE_syscall.ptrace.negative_ENOSYS ... > # # OK TRACE_syscall.ptrace.negative_ENOSYS > # ok 74 TRACE_syscall.ptrace.negative_ENOSYS > # # RUN TRACE_syscall.ptrace.syscall_allowed ... > # # OK TRACE_syscall.ptrace.syscall_allowed > # ok 75 TRACE_syscall.ptrace.syscall_allowed > # # RUN TRACE_syscall.ptrace.syscall_redirected ... > # # OK TRACE_syscall.ptrace.syscall_redirected > # ok 76 TRACE_syscall.ptrace.syscall_redirected > # # RUN TRACE_syscall.ptrace.syscall_errno ... > # # OK TRACE_syscall.ptrace.syscall_errno > # ok 77 TRACE_syscall.ptrace.syscall_errno > # # RUN TRACE_syscall.ptrace.syscall_faked ... > # # OK TRACE_syscall.ptrace.syscall_faked > # ok 78 TRACE_syscall.ptrace.syscall_faked > # # RUN TRACE_syscall.ptrace.kill_immediate ... > # # OK TRACE_syscall.ptrace.kill_immediate > # ok 79 TRACE_syscall.ptrace.kill_immediate > # # RUN TRACE_syscall.ptrace.skip_after ... > # # OK TRACE_syscall.ptrace.skip_after > # ok 80 TRACE_syscall.ptrace.skip_after > # # RUN TRACE_syscall.ptrace.kill_after ... > # # OK TRACE_syscall.ptrace.kill_after > # ok 81 TRACE_syscall.ptrace.kill_after > # # RUN TRACE_syscall.seccomp.negative_ENOSYS ... > # # OK TRACE_syscall.seccomp.negative_ENOSYS > # ok 82 TRACE_syscall.seccomp.negative_ENOSYS > # # RUN TRACE_syscall.seccomp.syscall_allowed ... > # # OK TRACE_syscall.seccomp.syscall_allowed > # ok 83 TRACE_syscall.seccomp.syscall_allowed > # # RUN TRACE_syscall.seccomp.syscall_redirected ... > # # OK TRACE_syscall.seccomp.syscall_redirected > # ok 84 TRACE_syscall.seccomp.syscall_redirected > # # RUN TRACE_syscall.seccomp.syscall_errno ... > # # OK TRACE_syscall.seccomp.syscall_errno > # ok 85 TRACE_syscall.seccomp.syscall_errno > # # RUN TRACE_syscall.seccomp.syscall_faked ... > # # OK TRACE_syscall.seccomp.syscall_faked > # ok 86 TRACE_syscall.seccomp.syscall_faked > # # RUN TRACE_syscall.seccomp.kill_immediate ... > # # OK TRACE_syscall.seccomp.kill_immediate > # ok 87 TRACE_syscall.seccomp.kill_immediate > # # RUN TRACE_syscall.seccomp.skip_after ... > # # OK TRACE_syscall.seccomp.skip_after > # ok 88 TRACE_syscall.seccomp.skip_after > # # RUN TRACE_syscall.seccomp.kill_after ... > # # OK TRACE_syscall.seccomp.kill_after > # ok 89 TRACE_syscall.seccomp.kill_after > # # RUN TSYNC.siblings_fail_prctl ... > # # OK TSYNC.siblings_fail_prctl > # ok 90 TSYNC.siblings_fail_prctl > # # RUN TSYNC.two_siblings_with_ancestor ... > # # OK TSYNC.two_siblings_with_ancestor > # ok 91 TSYNC.two_siblings_with_ancestor > # # RUN TSYNC.two_sibling_want_nnp ... > # # OK TSYNC.two_sibling_want_nnp > # ok 92 TSYNC.two_sibling_want_nnp > # # RUN TSYNC.two_siblings_with_no_filter ... > # # OK TSYNC.two_siblings_with_no_filter > # ok 93 TSYNC.two_siblings_with_no_filter > # # RUN TSYNC.two_siblings_with_one_divergence ... > # # OK TSYNC.two_siblings_with_one_divergence > # ok 94 TSYNC.two_siblings_with_one_divergence > # # RUN TSYNC.two_siblings_with_one_divergence_no_tid_in_err ... > # # OK TSYNC.two_siblings_with_one_divergence_no_tid_in_err > # ok 95 TSYNC.two_siblings_with_one_divergence_no_tid_in_err > # # RUN TSYNC.two_siblings_not_under_filter ... > # # OK TSYNC.two_siblings_not_under_filter > # ok 96 TSYNC.two_siblings_not_under_filter > # # RUN O_SUSPEND_SECCOMP.setoptions ... > # # OK O_SUSPEND_SECCOMP.setoptions > # ok 97 O_SUSPEND_SECCOMP.setoptions > # # RUN O_SUSPEND_SECCOMP.seize ... > # # OK O_SUSPEND_SECCOMP.seize > # ok 98 O_SUSPEND_SECCOMP.seize > # # PASSED: 98 / 98 tests passed. > # # Totals: pass:98 fail:0 xfail:0 xpass:0 skip:0 error:0 > ok 1 selftests: seccomp: seccomp_bpf > # timeout set to 180 > # selftests: seccomp: seccomp_benchmark > # TAP version 13 > # 1..7 > # # Running on: > # # Linux 10.0.2.15 6.12.0-rc1-gf85c105361db #6 SMP Thu Oct 24 12:16:15 UTC > 2024 ppc64le GNU/Linux > # # Current BPF sysctl settings: > # # /proc/sys/net/core/bpf_jit_enable:1 > # # /proc/sys/net/core/bpf_jit_harden:0 > # Pinned to CPU 16 of 16 > # # Calibrating sample size for 15 seconds worth of syscalls ... > # # Benchmarking 56397315 syscalls... > [ 263.908829][ C15] sched: DL replenish lagged too much > # # 12.720538528 - 0.000000000 = 12720538528 (12.7s) > # # getpid native: 225 ns > # # 31.362959638 - 12.720723906 = 18642235732 (18.6s) > # # getpid RET_ALLOW 1 filter (bitmap): 330 ns > # # 50.202651764 - 31.363058760 = 18839593004 (18.8s) > # # getpid RET_ALLOW 2 filters (bitmap): 334 ns > # # 73.073719578 - 50.202778500 = 22870941078 (22.9s) > # # getpid RET_ALLOW 3 filters (full): 405 ns > # # 97.560580500 - 73.073834670 = 24486745830 (24.5s) > # # getpid RET_ALLOW 4 filters (full): 434 ns > # # Estimated total seccomp overhead for 1 bitmapped filter: 105 ns > # # Estimated total seccomp overhead for 2 bitmapped filters: 109 ns > # # Estimated total seccomp overhead for 3 full filters: 180 ns > # # Estimated total seccomp overhead for 4 full filters: 209 ns > # # Estimated seccomp entry overhead: 101 ns > # # Estimated seccomp per-filter overhead (last 2 diff): 29 ns > # # Estimated seccomp per-filter overhead (filters / 4): 27 ns > # # Expectations: > # # native ≤ 1 bitmap (225 ≤ 330): ✔️ > # ok 1 native ≤ 1 bitmap > # # native ≤ 1 filter (225 ≤ 405): ✔️ > # ok 2 native ≤ 1 filter > # # per-filter (last 2 diff) ≈ per-filter (filters / 4) (29 ≈ 27): ✔️ > # ok 3 per-filter (last 2 diff) ≈ per-filter (filters / 4) > # # 1 bitmapped ≈ 2 bitmapped (105 ≈ 109): ✔️ > # ok 4 1 bitmapped ≈ 2 bitmapped > # # entry ≈ 1 bitmapped (101 ≈ 105): ✔️ > # ok 5 entry ≈ 1 bitmapped > # # entry ≈ 2 bitmapped (101 ≈ 109): ✔️ > # ok 6 entry ≈ 2 bitmapped > # # native + entry + (per filter * 4) ≈ 4 filters total (442 ≈ 434): ✔️ > # ok 7 native + entry + (per filter * 4) ≈ 4 filters total > # # Totals: pass:7 fail:0 xfail:0 xpass:0 skip:0 error:0 > ok 2 selftests: seccomp: seccomp_benchmark > make: Leaving directory '/root/linux-ci/tools/testing/selftests' > > > > [root@10 linux-ci]# make -C tools/testing/selftests TARGETS=seccomp > > run_tests > > make: Entering directory '/root/linux-ci/tools/testing/selftests' > > make[1]: Nothing to be done for 'all'. > > TAP version 13 > > 1..2 > > # timeout set to 180 > > # selftests: seccomp: seccomp_bpf > > # TAP version 13 > > # 1..98 > > # # Starting 98 tests from 8 test cases. > > # # RUN global.kcmp ... > > # # OK global.kcmp > > # ok 1 global.kcmp > > # # RUN global.mode_strict_support ... > > # # OK global.mode_strict_support > > # ok 2 global.mode_strict_support > > # # RUN global.mode_strict_cannot_call_prctl ... > > # # seccomp_bpf.c:359:mode_strict_cannot_call_prctl:Expected 0 (0) == true > > (1) > > # # seccomp_bpf.c:360:mode_strict_cannot_call_prctl:Unreachable! > > # # mode_strict_cannot_call_prctl: Test exited normally instead of by > > signal (code: 1) > > # # FAIL global.mode_strict_cannot_call_prctl > > # not ok 3 global.mode_strict_cannot_call_prctl > > # # RUN global.no_new_privs_support ... > > # # OK global.no_new_privs_support > > # ok 4 global.no_new_privs_support > > # # RUN global.mode_filter_support ... > > # # OK global.mode_filter_support > > # ok 5 global.mode_filter_support > > # # RUN global.mode_filter_without_nnp ... > > # # OK global.mode_filter_without_nnp > > # ok 6 global.mode_filter_without_nnp > > # # RUN global.filter_size_limits ... > > # # OK global.filter_size_limits > > # ok 7 global.filter_size_limits > > # # RUN global.filter_chain_limits ... > > # # OK global.filter_chain_limits > > # ok 8 global.filter_chain_limits > > # # RUN global.mode_filter_cannot_move_to_strict ... > > # # OK global.mode_filter_cannot_move_to_strict > > # ok 9 global.mode_filter_cannot_move_to_strict > > # # RUN global.mode_filter_get_seccomp ... > > # # OK global.mode_filter_get_seccomp > > # ok 10 global.mode_filter_get_seccomp > > # # RUN global.ALLOW_all ... > > # # OK global.ALLOW_all > > # ok 11 global.ALLOW_all > > # # RUN global.empty_prog ... > > # # OK global.empty_prog > > # ok 12 global.empty_prog > > # # RUN global.log_all ... > > # # OK global.log_all > > # ok 13 global.log_all > > # # RUN global.unknown_ret_is_kill_inside ... > > # # seccomp_bpf.c:621:unknown_ret_is_kill_inside:Expected 0 (0) == > > syscall(__NR_getpid) (1406) > > # # seccomp_bpf.c:622:unknown_ret_is_kill_inside:getpid() shouldn't ever > > return > > # # unknown_ret_is_kill_inside: Test exited normally instead of by signal > > (code: 1) > > # # FAIL global.unknown_ret_is_kill_inside > > # not ok 14 global.unknown_ret_is_kill_inside > > # # RUN global.unknown_ret_is_kill_above_allow ... > > # # seccomp_bpf.c:643:unknown_ret_is_kill_above_allow:Expected 0 (0) == > > syscall(__NR_getpid) (1407) > > # # seccomp_bpf.c:644:unknown_ret_is_kill_above_allow:getpid() shouldn't > > ever return > > # # unknown_ret_is_kill_above_allow: Test exited normally instead of by > > signal (code: 1) > > # # FAIL global.unknown_ret_is_kill_above_allow > > # not ok 15 global.unknown_ret_is_kill_above_allow > > # # RUN global.KILL_all ... > > # # KILL_all: Test exited normally instead of by signal (code: 0) > > # # FAIL global.KILL_all > > # not ok 16 global.KILL_all > > # # RUN global.KILL_one ... > > # # seccomp_bpf.c:690:KILL_one:Expected 0 (0) == syscall(__NR_getpid) (1409) > > # # KILL_one: Test exited normally instead of by signal (code: 1) > > # # FAIL global.KILL_one > > # not ok 17 global.KILL_one > > # # RUN global.KILL_one_arg_one ... > > # # seccomp_bpf.c:726:KILL_one_arg_one:Expected 0 (0) == > > syscall(__NR_times, &fatal_address) (4295224651) > > # # KILL_one_arg_one: Test exited normally instead of by signal (code: 1) > > # # FAIL global.KILL_one_arg_one > > # not ok 18 global.KILL_one_arg_one > > # # RUN global.KILL_one_arg_six ... > > # # KILL_one_arg_six: Test exited normally instead of by signal (code: 0) > > # # FAIL global.KILL_one_arg_six > > # not ok 19 global.KILL_one_arg_six > > # # RUN global.KILL_thread ... > > # # seccomp_bpf.c:856:KILL_thread:Expected SIBLING_EXIT_FAILURE (195951310) > > != (unsigned long)status (195951310) > > # # seccomp_bpf.c:881:KILL_thread:Expected 0 (0) != WIFEXITED(status) (0) > > # # KILL_thread: Test terminated by assertion > > # # FAIL global.KILL_thread > > # not ok 20 global.KILL_thread > > # # RUN global.KILL_process ... > > # # seccomp_bpf.c:856:KILL_process:Expected SIBLING_EXIT_FAILURE > > (195951310) != (unsigned long)status (195951310) > > # # seccomp_bpf.c:901:KILL_process:Expected SIGSYS (31) == WTERMSIG(status) > > (6) > > # # KILL_process: Test terminated by assertion > > # # FAIL global.KILL_process > > # not ok 21 global.KILL_process > > # # RUN global.KILL_unknown ... > > # # seccomp_bpf.c:856:KILL_unknown:Expected SIBLING_EXIT_FAILURE > > (195951310) != (unsigned long)status (195951310) > > # # seccomp_bpf.c:922:KILL_unknown:Expected SIGSYS (31) == WTERMSIG(status) > > (6) > > # # KILL_unknown: Test terminated by assertion > > # # FAIL global.KILL_unknown > > # not ok 22 global.KILL_unknown > > # # RUN global.arg_out_of_range ... > > # # OK global.arg_out_of_range > > # ok 23 global.arg_out_of_range > > # # RUN global.ERRNO_valid ... > > # # seccomp_bpf.c:974:ERRNO_valid:Expected E2BIG (7) == errno (9) > > # # ERRNO_valid: Test failed > > # # FAIL global.ERRNO_valid > > # not ok 24 global.ERRNO_valid > > # # RUN global.ERRNO_zero ... > > # # seccomp_bpf.c:992:ERRNO_zero:Expected 0 (0) == read(-1, NULL, 0) (-1) > > # # ERRNO_zero: Test failed > > # # FAIL global.ERRNO_zero > > # not ok 25 global.ERRNO_zero > > # # RUN global.ERRNO_capped ... > > # # seccomp_bpf.c:1014:ERRNO_capped:Expected 4095 (4095) == errno (9) > > # # ERRNO_capped: Test failed > > # # FAIL global.ERRNO_capped > > # not ok 26 global.ERRNO_capped > > # # RUN global.ERRNO_order ... > > # # seccomp_bpf.c:1045:ERRNO_order:Expected 12 (12) == errno (9) > > # # ERRNO_order: Test failed > > # # FAIL global.ERRNO_order > > # not ok 27 global.ERRNO_order > > # # RUN global.negative_ENOSYS ... > > # # OK global.negative_ENOSYS > > # ok 28 global.negative_ENOSYS > > # # RUN global.seccomp_syscall ... > > # # OK global.seccomp_syscall > > # ok 29 global.seccomp_syscall > > # # RUN global.seccomp_syscall_mode_lock ... > > # # OK global.seccomp_syscall_mode_lock > > # ok 30 global.seccomp_syscall_mode_lock > > # # RUN global.detect_seccomp_filter_flags ... > > # # OK global.detect_seccomp_filter_flags > > # ok 31 global.detect_seccomp_filter_flags > > # # RUN global.TSYNC_first ... > > # # OK global.TSYNC_first > > # ok 32 global.TSYNC_first > > # # RUN global.syscall_restart ... > > # # syscall_restart: Test terminated by timeout > > # # FAIL global.syscall_restart > > # not ok 33 global.syscall_restart > > # # RUN global.filter_flag_log ... > > # # seccomp_bpf.c:3239:filter_flag_log:Expected 0 (0) == > > syscall(__NR_getpid) (1482) > > # # filter_flag_log: Test exited normally instead of by signal (code: 1) > > # # FAIL global.filter_flag_log > > # not ok 34 global.filter_flag_log > > # # RUN global.get_action_avail ... > > # # OK global.get_action_avail > > # ok 35 global.get_action_avail > > # # RUN global.get_metadata ... > > # # OK global.get_metadata > > # ok 36 global.get_metadata > > # # RUN global.user_notification_basic ... > > # # seccomp_bpf.c:3397:user_notification_basic:Expected 0 (0) == > > WEXITSTATUS(status) (1) > > # # user_notification_basic: Test terminated by timeout > > # # FAIL global.user_notification_basic > > # not ok 37 global.user_notification_basic > > # # RUN global.user_notification_with_tsync ... > > # # OK global.user_notification_with_tsync > > # ok 38 global.user_notification_with_tsync > > # # RUN global.user_notification_kill_in_middle ... > > # # user_notification_kill_in_middle: Test terminated by timeout > > # # FAIL global.user_notification_kill_in_middle > > # not ok 39 global.user_notification_kill_in_middle > > # # RUN global.user_notification_signal ... > > # # user_notification_signal: Test terminated by timeout > > # # FAIL global.user_notification_signal > > # not ok 40 global.user_notification_signal > > # # RUN global.user_notification_closed_listener ... > > # # seccomp_bpf.c:3647:user_notification_closed_listener:Expected 0 (0) == > > WEXITSTATUS(status) (1) > > # # user_notification_closed_listener: Test failed > > # # FAIL global.user_notification_closed_listener > > # not ok 41 global.user_notification_closed_listener > > # # RUN global.user_notification_child_pid_ns ... > > # # user_notification_child_pid_ns: Test terminated by timeout > > # # FAIL global.user_notification_child_pid_ns > > # not ok 42 global.user_notification_child_pid_ns > > # # RUN global.user_notification_sibling_pid_ns ... > > # # seccomp_bpf.c:3728:user_notification_sibling_pid_ns:Expected 0 (0) == > > WEXITSTATUS(status) (1) > > # # seccomp_bpf.c:3764:user_notification_sibling_pid_ns:Expected 0 (0) == > > WEXITSTATUS(status) (1) > > > > > > > > > > cheers > > > > > >