Thread (9 messages) 9 messages, 3 authors, 2024-11-10

Re: [PATCH 1/7] powerpc/entry: convert to common and generic entry

From: Luming Yu <hidden>
Date: 2024-11-07 03:41:48
Also in: lkml
Subsystem: linux for powerpc (32-bit and 64-bit), the rest · Maintainers: Madhavan Srinivasan, Michael Ellerman, Linus Torvalds

On Tue, Nov 05, 2024 at 12:47:18PM +0800, Luming Yu wrote:
quoted hunk ↗ jump to hunk
On Fri, Oct 25, 2024 at 10:50:05AM +0800, Luming Yu wrote:
quoted
On Thu, Oct 24, 2024 at 04:43:04PM +0800, Luming Yu wrote:
quoted
On Wed, Oct 23, 2024 at 12:53:47PM +1100, Michael Ellerman wrote:
quoted
"虞陆铭" [off-list ref] writes:
quoted
quoted
Le 12/10/2024 à 05:56, Luming Yu a écrit :
quoted
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 <redacted>
---
  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(-)
...
quoted
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
quoted
quoted
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.
diff --git a/arch/powerpc/kernel/syscall.c b/arch/powerpc/kernel/syscall.c
index dabe7f2b4bd4..960a1cd6fb7e 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);
@@ -132,10 +132,18 @@ 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].
                 */
+               if (test_thread_flag(TIF_SECCOMP))
+                       regs->gpr[3] = -ENOSYS;
                r0 = syscall_enter_from_user_mode(regs, r0);
+               if (test_thread_flag(TIF_SECCOMP) && (r0 != -1)) {
+                       regs->gpr[3] = regs->orig_gpr3;
+                       r0 = regs->gpr[0];
+               }
+               if (regs->gpr[0] > NR_syscalls)
+                       regs->gpr[3] = -ENOSYS;
+
                if (unlikely(r0 >= NR_syscalls))
                        return regs->gpr[3];
Trying to mimic the original parameters, pt_regs and return value behavior from the deleted code,
out of 98 seccomp_bpf test cases, there are still two subtle cases failed.

#  RUN           TRACE_syscall.seccomp.syscall_errno ...
# seccomp_bpf.c:2227:syscall_errno:Expected -(-3) (3) == errno (38)
# syscall_errno: Test failed
#          FAIL  TRACE_syscall.seccomp.syscall_errno
not ok 85 TRACE_syscall.seccomp.syscall_errno
#  RUN           TRACE_syscall.seccomp.syscall_faked ...
# seccomp_bpf.c:2233:syscall_faked:Expected 45000 (45000) == syscall(207) (-1)
# syscall_faked: Test failed
#          FAIL  TRACE_syscall.seccomp.syscall_faked
not ok 86 TRACE_syscall.seccomp.syscall_faked
 
Apparently, there is still some magic that needs to be debug out.

# FAILED: 96 / 98 tests passed.
# Totals: pass:96 fail:2 xfail:0 xpass:0 skip:0 error:0

quoted
[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'

quoted
[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)

quoted
cheers
  
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help