diff mbox series

[BUG,net-next,selftests/pidfd] Hang in ./pidfd_setns_test pidfd_send_signal()

Message ID e2ba3f8c-80e6-477d-9cea-1c9af820e0ed@alu.unizg.hr (mailing list archive)
State New
Headers show
Series [BUG,net-next,selftests/pidfd] Hang in ./pidfd_setns_test pidfd_send_signal() | expand

Commit Message

Mirsad Todorovac March 9, 2024, 1:34 p.m. UTC
Hi,

In the net-next tree commit v6.8-rc7-2348-g75c2946db360, vannila except for this minor mod
to selftest suite:

----------------------------------------------------------------------------------------
marvin@defiant:~/linux/kernel/net-next$ git diff
marvin@defiant:~/linux/kernel/net-next$
----------------------------------------------------------------------------------------

there seems to be a bug.

The symptom is a hang in forever loop in ./pidfd_setns_test :

pidfd_send_signal(18, SIGKILL, NULL, 0) = 0
pidfd_send_signal(18, SIGKILL, NULL, 0) = 0
pidfd_send_signal(18, SIGKILL, NULL, 0) = 0
pidfd_send_signal(18, SIGKILL, NULL, 0) = 0
pidfd_send_signal(18, SIGKILL, NULL, 0) = 0
pidfd_send_signal(18, SIGKILL, NULL, 0) = 0
pidfd_send_signal(18, SIGKILL, NULL, 0) = 0
pidfd_send_signal(18, SIGKILL, NULL, 0) = 0
pidfd_send_signal(18, SIGKILL, NULL, 0) = 0
pidfd_send_signal(18, SIGKILL, NULL, 0) = 0
pidfd_send_signal(18, SIGKILL, NULL, 0) = 0
pidfd_send_signal(18, SIGKILL, NULL, 0) = 0
pidfd_send_signal(18, SIGKILL, NULL, 0) = 0
pidfd_send_signal(18, SIGKILL, NULL, 0) = 0
pidfd_send_signal(18, SIGKILL, NULL, 0) = 0
pidfd_send_signal(18, SIGKILL, NULL, 0) = 0
pidfd_send_signal(18, SIGKILL, NULL, 0) = 0
pidfd_send_signal(18, SIGKILL, NULL, 0) = 0
pidfd_send_signal(18, SIGKILL, NULL, 0) = 0
pidfd_send_signal(18, SIGKILL, NULL, 0) = 0
.
.
.

This could happen here:

FIXTURE_TEARDOWN(current_nsset)
{
         int i;

→       ASSERT_EQ(sys_pidfd_send_signal(self->child_pidfd1,
                                         SIGKILL, NULL, 0), 0);
→       ASSERT_EQ(sys_pidfd_send_signal(self->child_pidfd2,
                                         SIGKILL, NULL, 0), 0);

         for (i = 0; i < PIDFD_NS_MAX; i++) {
                 if (self->nsfds[i] >= 0)
                         close(self->nsfds[i]);
                 if (self->child_nsfds1[i] >= 0)
                         close(self->child_nsfds1[i]);
                 if (self->child_nsfds2[i] >= 0)
                         close(self->child_nsfds2[i]);
         }

         if (self->child_pidfd1 >= 0)
                 EXPECT_EQ(0, close(self->child_pidfd1));
         if (self->child_pidfd2 >= 0)
                 EXPECT_EQ(0, close(self->child_pidfd2));
         ASSERT_EQ(sys_waitid(P_PID, self->child_pid_exited, WEXITED), 0);
         ASSERT_EQ(sys_waitid(P_PID, self->child_pid1, WEXITED), 0);
         ASSERT_EQ(sys_waitid(P_PID, self->child_pid2, WEXITED), 0);
}

The testsuite output is this:

root@defiant:/home/marvin/linux/kernel/net-next/tools/testing/selftests/pidfd# ./pidfd_setns_test
TAP version 13
1..7
# Starting 7 tests from 2 test cases.
#  RUN           global.setns_einval ...
#            OK  global.setns_einval
ok 1 global.setns_einval
#  RUN           current_nsset.invalid_flags ...
# pidfd_setns_test.c:161:invalid_flags:Expected self->child_pid_exited (0) > 0 (0)
#            OK  current_nsset.invalid_flags
ok 2 current_nsset.invalid_flags
#  RUN           current_nsset.pidfd_exited_child ...
# pidfd_setns_test.c:161:pidfd_exited_child:Expected self->child_pid_exited (0) > 0 (0)
#            OK  current_nsset.pidfd_exited_child
ok 3 current_nsset.pidfd_exited_child
#  RUN           current_nsset.pidfd_incremental_setns ...
# pidfd_setns_test.c:161:pidfd_incremental_setns:Expected self->child_pid_exited (0) > 0 (0)
# pidfd_setns_test.c:408:pidfd_incremental_setns:Managed to correctly setns to user namespace of 1005687 via pidfd 18
# pidfd_setns_test.c:408:pidfd_incremental_setns:Managed to correctly setns to mnt namespace of 1005687 via pidfd 18
# pidfd_setns_test.c:408:pidfd_incremental_setns:Managed to correctly setns to pid namespace of 1005687 via pidfd 18
# pidfd_setns_test.c:408:pidfd_incremental_setns:Managed to correctly setns to uts namespace of 1005687 via pidfd 18
# pidfd_setns_test.c:408:pidfd_incremental_setns:Managed to correctly setns to ipc namespace of 1005687 via pidfd 18
# pidfd_setns_test.c:408:pidfd_incremental_setns:Managed to correctly setns to net namespace of 1005687 via pidfd 18
# pidfd_setns_test.c:408:pidfd_incremental_setns:Managed to correctly setns to cgroup namespace of 1005687 via pidfd 18
# pidfd_setns_test.c:408:pidfd_incremental_setns:Managed to correctly setns to pid_for_children namespace of 1005687 via pidfd 18
# pidfd_setns_test.c:391:pidfd_incremental_setns:Expected setns(self->child_pidfd1, info->flag) (-1) == 0 (0)
# pidfd_setns_test.c:392:pidfd_incremental_setns:Too many users - Failed to setns to time namespace of 1005687 via pidfd 18
# pidfd_incremental_setns: Test terminated by timeout
#          FAIL  current_nsset.pidfd_incremental_setns
not ok 4 current_nsset.pidfd_incremental_setns
#  RUN           current_nsset.nsfd_incremental_setns ...
# pidfd_setns_test.c:161:nsfd_incremental_setns:Expected self->child_pid_exited (0) > 0 (0)
# pidfd_setns_test.c:444:nsfd_incremental_setns:Managed to correctly setns to user namespace of 1005695 via nsfd 17
# pidfd_setns_test.c:444:nsfd_incremental_setns:Managed to correctly setns to mnt namespace of 1005695 via nsfd 22
# pidfd_setns_test.c:444:nsfd_incremental_setns:Managed to correctly setns to pid namespace of 1005695 via nsfd 25
# pidfd_setns_test.c:444:nsfd_incremental_setns:Managed to correctly setns to uts namespace of 1005695 via nsfd 28
# pidfd_setns_test.c:444:nsfd_incremental_setns:Managed to correctly setns to ipc namespace of 1005695 via nsfd 31
# pidfd_setns_test.c:444:nsfd_incremental_setns:Managed to correctly setns to net namespace of 1005695 via nsfd 34
# pidfd_setns_test.c:444:nsfd_incremental_setns:Managed to correctly setns to cgroup namespace of 1005695 via nsfd 37
# pidfd_setns_test.c:444:nsfd_incremental_setns:Managed to correctly setns to pid_for_children namespace of 1005695 via nsfd 40
# pidfd_setns_test.c:427:nsfd_incremental_setns:Expected setns(self->child_nsfds1[i], info->flag) (-1) == 0 (0)
# pidfd_setns_test.c:428:nsfd_incremental_setns:Too many users - Failed to setns to time namespace of 1005695 via nsfd 43
# nsfd_incremental_setns: Test terminated by timeout
#          FAIL  current_nsset.nsfd_incremental_setns
not ok 5 current_nsset.nsfd_incremental_setns
#  RUN           current_nsset.pidfd_one_shot_setns ...
# pidfd_setns_test.c:161:pidfd_one_shot_setns:Expected self->child_pid_exited (0) > 0 (0)
# pidfd_setns_test.c:462:pidfd_one_shot_setns:Adding user namespace of 1005710 to list of namespaces to attach to
# pidfd_setns_test.c:462:pidfd_one_shot_setns:Adding mnt namespace of 1005710 to list of namespaces to attach to
# pidfd_setns_test.c:462:pidfd_one_shot_setns:Adding pid namespace of 1005710 to list of namespaces to attach to
# pidfd_setns_test.c:462:pidfd_one_shot_setns:Adding uts namespace of 1005710 to list of namespaces to attach to
# pidfd_setns_test.c:462:pidfd_one_shot_setns:Adding ipc namespace of 1005710 to list of namespaces to attach to
# pidfd_setns_test.c:462:pidfd_one_shot_setns:Adding net namespace of 1005710 to list of namespaces to attach to
# pidfd_setns_test.c:462:pidfd_one_shot_setns:Adding cgroup namespace of 1005710 to list of namespaces to attach to
# pidfd_setns_test.c:462:pidfd_one_shot_setns:Adding pid_for_children namespace of 1005710 to list of namespaces to attach to
# pidfd_setns_test.c:462:pidfd_one_shot_setns:Adding time namespace of 1005710 to list of namespaces to attach to
# pidfd_setns_test.c:466:pidfd_one_shot_setns:Expected setns(self->child_pidfd1, flags) (-1) == 0 (0)
# pidfd_setns_test.c:467:pidfd_one_shot_setns:Too many users - Failed to setns to namespaces of 1005710
# pidfd_one_shot_setns: Test terminated by timeout
#          FAIL  current_nsset.pidfd_one_shot_setns
not ok 6 current_nsset.pidfd_one_shot_setns
#  RUN           current_nsset.no_foul_play ...
# pidfd_setns_test.c:161:no_foul_play:Expected self->child_pid_exited (0) > 0 (0)
# pidfd_setns_test.c:506:no_foul_play:Adding user namespace of 1005745 to list of namespaces to attach to
# pidfd_setns_test.c:506:no_foul_play:Adding mnt namespace of 1005745 to list of namespaces to attach to
# pidfd_setns_test.c:506:no_foul_play:Adding pid namespace of 1005745 to list of namespaces to attach to
# pidfd_setns_test.c:506:no_foul_play:Adding uts namespace of 1005745 to list of namespaces to attach to
# pidfd_setns_test.c:506:no_foul_play:Adding ipc namespace of 1005745 to list of namespaces to attach to
# pidfd_setns_test.c:506:no_foul_play:Adding net namespace of 1005745 to list of namespaces to attach to
# pidfd_setns_test.c:506:no_foul_play:Adding cgroup namespace of 1005745 to list of namespaces to attach to
# pidfd_setns_test.c:506:no_foul_play:Adding time namespace of 1005745 to list of namespaces to attach to
# pidfd_setns_test.c:510:no_foul_play:Expected setns(self->child_pidfd1, flags) (-1) == 0 (0)
# pidfd_setns_test.c:511:no_foul_play:Too many users - Failed to setns to namespaces of 1005745 vid pidfd 18
# no_foul_play: Test terminated by timeout
#          FAIL  current_nsset.no_foul_play
not ok 7 current_nsset.no_foul_play
# FAILED: 3 / 7 tests passed.
# Totals: pass:3 fail:4 xfail:0 xpass:0 skip:0 error:0
root@defiant:/home/marvin/linux/kernel/net-next/tools/testing/selftests/pidfd#

The main selftest thread is still hanging with total output of:

make[3]: Entering directory '/home/marvin/linux/kernel/net-next/tools/testing/selftests/pidfd'
TAP version 13
1..7
# timeout set to 45
# selftests: pidfd: pidfd_test
# TAP version 13
# 1..8
# # Parent: pid: 958028
# # Parent: Waiting for Child (958029) to complete.
# # Child (pidfd): starting. pid 958029 tid 958029
# # Child Thread: starting. pid 958029 tid 958030 ; and sleeping
# # Child Thread: doing exec of sleep
# # Time waited for child: 3
# ok 1 pidfd_poll check for premature notification on child thread exec test: Passed
# # Parent: pid: 958028
# # Parent: Waiting for Child (958031) to complete.
# # Child (pidfd): starting. pid 958031 tid 958031
# # Child Thread: starting. pid 958031 tid 958032 ; and sleeping
# # Child Thread: doing exec of sleep
# # Parent: Child process waited for.
# # Time waited for child: 3
# ok 2 pidfd_poll check for premature notification on child thread exec test: Passed
# # Parent: pid: 958028
# # Parent: Waiting for Child (958033) to complete.
# # Child: starting. pid 958033 tid 958033
# # Child Thread: starting. pid 958033 tid 958034 ; and sleeping
# # Child Thread: starting. pid 958033 tid 958035 ; and sleeping
# # # Child Thread: DONE. pid 958033 tid 958034
# Child Thread: DONE. pid 958033 tid 958035
# # Time since child exit: 3
# ok 3 pidfd_poll check for premature notification on non-emptygroup leader exit test: Passed
# # Parent: pid: 958028
# # Parent: Waiting for Child (958036) to complete.
# # Child: starting. pid 958036 tid 958036
# # Child Thread: starting. pid 958036 tid 958037 ; and sleeping
# # Child Thread: starting. pid 958036 tid 958038 ; and sleeping
# # Child Thread: DONE. pid 958036 tid 958037
# # Child Thread: DONE. pid 958036 tid 958038
# # Parent: Child process waited for.
# # Time since child exit: 3
# ok 4 pidfd_poll check for premature notification on non-emptygroup leader exit test: Passed
# ok 5 pidfd_send_signal check for support test: pidfd_send_signal() syscall is supported. Tests can be executed
# ok 6 pidfd_send_signal send SIGUSR1 test: Sent signal
# # waitpid WEXITSTATUS=0
# ok 7 pidfd_send_signal signal exited process test: Failed to send signal as expected
# # pid to recycle is 1000
# ok 8 # SKIP pidfd_send_signal signal recycled pid test: Skipping test
# # Totals: pass:7 fail:0 xfail:0 xpass:0 skip:1 error:0
ok 1 selftests: pidfd: pidfd_test
# timeout set to 45
# selftests: pidfd: pidfd_fdinfo_test
# TAP version 13
# 1..2
# # New child: 990827, fd: 5
# # New child: 990828, fd: 6
# # waitpid WEXITSTATUS=0
# # waitpid WEXITSTATUS=0
# ok 1 pidfd check for NSpid in fdinfo test: Passed
# # New child: 990830, fd: 5
# # waitpid WEXITSTATUS=0
# ok 2 pidfd check fdinfo for dead process test: Passed
# # Totals: pass:2 fail:0 xfail:0 xpass:0 skip:0 error:0
ok 2 selftests: pidfd: pidfd_fdinfo_test
# timeout set to 45
# selftests: pidfd: pidfd_open_test
# 1..3
# ok 1 do not allow invalid pid test: passed
# ok 2 do not allow invalid flag test: passed
# ok 3 open a new pidfd test: passed
# # pidfd 5 refers to process with pid 990848
# # Totals: pass:3 fail:0 xfail:0 xpass:0 skip:0 error:0
ok 3 selftests: pidfd: pidfd_open_test
# timeout set to 45
# selftests: pidfd: pidfd_poll_test
# # running pidfd poll test for 10000 iterations
# ok 1 pidfd poll test: pass
# # Planned tests != run tests (0 != 1)
# # Totals: pass:1 fail:0 xfail:0 xpass:0 skip:0 error:0
ok 4 selftests: pidfd: pidfd_poll_test
# timeout set to 45
# selftests: pidfd: pidfd_wait
# TAP version 13
# 1..3
# # Starting 3 tests from 1 test cases.
# #  RUN           global.wait_simple ...
# #            OK  global.wait_simple
# ok 1 global.wait_simple
# #  RUN           global.wait_states ...
# #            OK  global.wait_states
# ok 2 global.wait_states
# #  RUN           global.wait_nonblock ...
# #            OK  global.wait_nonblock
# ok 3 global.wait_nonblock
# # PASSED: 3 / 3 tests passed.
# # Totals: pass:3 fail:0 xfail:0 xpass:0 skip:0 error:0
ok 5 selftests: pidfd: pidfd_wait
# timeout set to 45
# selftests: pidfd: pidfd_getfd_test
# TAP version 13
# 1..4
# # Starting 4 tests from 2 test cases.
# #  RUN           global.flags_set ...
# #            OK  global.flags_set
# ok 1 global.flags_set
# #  RUN           child.disable_ptrace ...
# #            OK  child.disable_ptrace
# ok 2 child.disable_ptrace
# #  RUN           child.fetch_fd ...
# #            OK  child.fetch_fd
# ok 3 child.fetch_fd
# #  RUN           child.test_unknown_fd ...
# #            OK  child.test_unknown_fd
# ok 4 child.test_unknown_fd
# # PASSED: 4 / 4 tests passed.
# # Totals: pass:4 fail:0 xfail:0 xpass:0 skip:0 error:0
ok 6 selftests: pidfd: pidfd_getfd_test
# timeout set to 45
# selftests: pidfd: pidfd_setns_test
# TAP version 13
# 1..7
# # Starting 7 tests from 2 test cases.
# #  RUN           global.setns_einval ...
# #            OK  global.setns_einval
# ok 1 global.setns_einval
# #  RUN           current_nsset.invalid_flags ...
# # pidfd_setns_test.c:161:invalid_flags:Expected self->child_pid_exited (0) > 0 (0)
# #            OK  current_nsset.invalid_flags
# ok 2 current_nsset.invalid_flags
# #  RUN           current_nsset.pidfd_exited_child ...
# # pidfd_setns_test.c:161:pidfd_exited_child:Expected self->child_pid_exited (0) > 0 (0)
# #            OK  current_nsset.pidfd_exited_child
# ok 3 current_nsset.pidfd_exited_child
# #  RUN           current_nsset.pidfd_incremental_setns ...
# # pidfd_setns_test.c:161:pidfd_incremental_setns:Expected self->child_pid_exited (0) > 0 (0)
# # pidfd_setns_test.c:408:pidfd_incremental_setns:Managed to correctly setns to user namespace of 1000951 via pidfd 20
# # pidfd_setns_test.c:408:pidfd_incremental_setns:Managed to correctly setns to mnt namespace of 1000951 via pidfd 20
# # pidfd_setns_test.c:408:pidfd_incremental_setns:Managed to correctly setns to pid namespace of 1000951 via pidfd 20
# # pidfd_setns_test.c:408:pidfd_incremental_setns:Managed to correctly setns to uts namespace of 1000951 via pidfd 20
# # pidfd_setns_test.c:408:pidfd_incremental_setns:Managed to correctly setns to ipc namespace of 1000951 via pidfd 20
# # pidfd_setns_test.c:408:pidfd_incremental_setns:Managed to correctly setns to net namespace of 1000951 via pidfd 20
# # pidfd_setns_test.c:408:pidfd_incremental_setns:Managed to correctly setns to cgroup namespace of 1000951 via pidfd 20
# # pidfd_setns_test.c:408:pidfd_incremental_setns:Managed to correctly setns to pid_for_children namespace of 1000951 via pidfd 20
# # pidfd_setns_test.c:391:pidfd_incremental_setns:Expected setns(self->child_pidfd1, info->flag) (-1) == 0 (0)
# # pidfd_setns_test.c:392:pidfd_incremental_setns:Too many users - Failed to setns to time namespace of 1000951 via pidfd 20
# # pidfd_incremental_setns: Test terminated by timeout
# #          FAIL  current_nsset.pidfd_incremental_setns
# not ok 4 current_nsset.pidfd_incremental_setns
# #  RUN           current_nsset.nsfd_incremental_setns ...
# # pidfd_setns_test.c:161:nsfd_incremental_setns:Expected self->child_pid_exited (0) > 0 (0)
# # pidfd_setns_test.c:444:nsfd_incremental_setns:Managed to correctly setns to user namespace of 1000958 via nsfd 19
# # pidfd_setns_test.c:444:nsfd_incremental_setns:Managed to correctly setns to mnt namespace of 1000958 via nsfd 24
# # pidfd_setns_test.c:444:nsfd_incremental_setns:Managed to correctly setns to pid namespace of 1000958 via nsfd 27
# # pidfd_setns_test.c:444:nsfd_incremental_setns:Managed to correctly setns to uts namespace of 1000958 via nsfd 30
# # pidfd_setns_test.c:444:nsfd_incremental_setns:Managed to correctly setns to ipc namespace of 1000958 via nsfd 33
# # pidfd_setns_test.c:444:nsfd_incremental_setns:Managed to correctly setns to net namespace of 1000958 via nsfd 36
# # pidfd_setns_test.c:444:nsfd_incremental_setns:Managed to correctly setns to cgroup namespace of 1000958 via nsfd 39
# # pidfd_setns_test.c:444:nsfd_incremental_setns:Managed to correctly setns to pid_for_children namespace of 1000958 via nsfd 42
# # pidfd_setns_test.c:427:nsfd_incremental_setns:Expected setns(self->child_nsfds1[i], info->flag) (-1) == 0 (0)
# # pidfd_setns_test.c:428:nsfd_incremental_setns:Too many users - Failed to setns to time namespace of 1000958 via nsfd 45
[HANG]
# ps -efwww
root      958005   66430  0 01:04 pts/2    00:00:00 make OUTPUT=/home/marvin/linux/kernel/net-next/tools/testing/selftests/pidfd -C pidfd run_tests SRC_PATH=/home/marvin/linux/kernel/net-next/tools/testing/selftests OBJ_PATH=/home/marvin/linux/kernel/net-next/tools/testing/selftests O=/home/marvin/linux/kernel/net-next
root      958006  958005  0 01:04 pts/2    00:00:00 /bin/sh -c BASE_DIR="/home/marvin/linux/kernel/net-next/tools/testing/selftests"; . /home/marvin/linux/kernel/net-next/tools/testing/selftests/kselftest/runner.sh; if [ "X" != "X" ]; then per_test_logging=1; fi; run_many  /home/marvin/linux/kernel/net-next/tools/testing/selftests/pidfd/pidfd_test /home/marvin/linux/kernel/net-next/tools/testing/selftests/pidfd/pidfd_fdinfo_test /home/marvin/linux/kernel/net-next/tools/testing/selftests/pidfd/pidfd_open_test /home/marvin/linux/kernel/net-next/tools/testing/selftests/pidfd/pidfd_poll_test /home/marvin/linux/kernel/net-next/tools/testing/selftests/pidfd/pidfd_wait /home/marvin/linux/kernel/net-next/tools/testing/selftests/pidfd/pidfd_getfd_test /home/marvin/linux/kernel/net-next/tools/testing/selftests/pidfd/pidfd_setns_test
root     1000927  958006  0 01:05 pts/2    00:00:00 /bin/sh -c BASE_DIR="/home/marvin/linux/kernel/net-next/tools/testing/selftests"; . /home/marvin/linux/kernel/net-next/tools/testing/selftests/kselftest/runner.sh; if [ "X" != "X" ]; then per_test_logging=1; fi; run_many  /home/marvin/linux/kernel/net-next/tools/testing/selftests/pidfd/pidfd_test /home/marvin/linux/kernel/net-next/tools/testing/selftests/pidfd/pidfd_fdinfo_test /home/marvin/linux/kernel/net-next/tools/testing/selftests/pidfd/pidfd_open_test /home/marvin/linux/kernel/net-next/tools/testing/selftests/pidfd/pidfd_poll_test /home/marvin/linux/kernel/net-next/tools/testing/selftests/pidfd/pidfd_wait /home/marvin/linux/kernel/net-next/tools/testing/selftests/pidfd/pidfd_getfd_test /home/marvin/linux/kernel/net-next/tools/testing/selftests/pidfd/pidfd_setns_test
root     1000928 1000927  0 01:05 pts/2    00:00:00 /bin/sh -c BASE_DIR="/home/marvin/linux/kernel/net-next/tools/testing/selftests"; . /home/marvin/linux/kernel/net-next/tools/testing/selftests/kselftest/runner.sh; if [ "X" != "X" ]; then per_test_logging=1; fi; run_many  /home/marvin/linux/kernel/net-next/tools/testing/selftests/pidfd/pidfd_test /home/marvin/linux/kernel/net-next/tools/testing/selftests/pidfd/pidfd_fdinfo_test /home/marvin/linux/kernel/net-next/tools/testing/selftests/pidfd/pidfd_open_test /home/marvin/linux/kernel/net-next/tools/testing/selftests/pidfd/pidfd_poll_test /home/marvin/linux/kernel/net-next/tools/testing/selftests/pidfd/pidfd_wait /home/marvin/linux/kernel/net-next/tools/testing/selftests/pidfd/pidfd_getfd_test /home/marvin/linux/kernel/net-next/tools/testing/selftests/pidfd/pidfd_setns_test
root     1000929 1000928  0 01:05 pts/2    00:00:00 /bin/sh -c BASE_DIR="/home/marvin/linux/kernel/net-next/tools/testing/selftests"; . /home/marvin/linux/kernel/net-next/tools/testing/selftests/kselftest/runner.sh; if [ "X" != "X" ]; then per_test_logging=1; fi; run_many  /home/marvin/linux/kernel/net-next/tools/testing/selftests/pidfd/pidfd_test /home/marvin/linux/kernel/net-next/tools/testing/selftests/pidfd/pidfd_fdinfo_test /home/marvin/linux/kernel/net-next/tools/testing/selftests/pidfd/pidfd_open_test /home/marvin/linux/kernel/net-next/tools/testing/selftests/pidfd/pidfd_poll_test /home/marvin/linux/kernel/net-next/tools/testing/selftests/pidfd/pidfd_wait /home/marvin/linux/kernel/net-next/tools/testing/selftests/pidfd/pidfd_getfd_test /home/marvin/linux/kernel/net-next/tools/testing/selftests/pidfd/pidfd_setns_test
root     1000932 1000929  0 01:05 pts/2    00:00:00 /bin/sh -c BASE_DIR="/home/marvin/linux/kernel/net-next/tools/testing/selftests"; . /home/marvin/linux/kernel/net-next/tools/testing/selftests/kselftest/runner.sh; if [ "X" != "X" ]; then per_test_logging=1; fi; run_many  /home/marvin/linux/kernel/net-next/tools/testing/selftests/pidfd/pidfd_test /home/marvin/linux/kernel/net-next/tools/testing/selftests/pidfd/pidfd_fdinfo_test /home/marvin/linux/kernel/net-next/tools/testing/selftests/pidfd/pidfd_open_test /home/marvin/linux/kernel/net-next/tools/testing/selftests/pidfd/pidfd_poll_test /home/marvin/linux/kernel/net-next/tools/testing/selftests/pidfd/pidfd_wait /home/marvin/linux/kernel/net-next/tools/testing/selftests/pidfd/pidfd_getfd_test /home/marvin/linux/kernel/net-next/tools/testing/selftests/pidfd/pidfd_setns_test
root     1000934 1000932  0 01:05 pts/2    00:00:00 perl /home/marvin/linux/kernel/net-next/tools/testing/selftests/kselftest/prefix.pl
root     1000955    2931  0 01:05 pts/2    00:00:00 ./pidfd_setns_test
root     1000956 1000955 99 01:05 pts/2    13:20:17 ./pidfd_setns_test
root     1000957 1000956  0 01:05 pts/2    00:00:00 [pidfd_setns_tes] <defunct>
root     1000958 1000956  0 01:05 pts/2    00:00:00 [pidfd_setns_tes] <defunct>
root     1000959 1000956  0 01:05 pts/2    00:00:00 ./pidfd_setns_test


in a 99%CPU forever loop:

pidfd_send_signal(20, SIGKILL, NULL, 0) = 0
pidfd_send_signal(20, SIGKILL, NULL, 0) = 0
pidfd_send_signal(20, SIGKILL, NULL, 0) = 0
pidfd_send_signal(20, SIGKILL, NULL, 0) = 0
pidfd_send_signal(20, SIGKILL, NULL, 0) = 0
pidfd_send_signal(20, SIGKILL, NULL, 0) = 0
pidfd_send_signal(20, SIGKILL, NULL, 0) = 0
pidfd_send_signal(20, SIGKILL, NULL, 0) = 0
pidfd_send_signal(20, SIGKILL, NULL, 0) = 0
pidfd_send_signal(20, SIGKILL, NULL, 0) = 0
pidfd_send_signal(20, SIGKILL, NULL, 0) = 0
pidfd_send_signal(20, SIGKILL, NULL, 0) = 0
pidfd_send_signal(20, SIGKILL, NULL, 0) = 0
pidfd_send_signal(20, SIGKILL, NULL, 0) = 0
pidfd_send_signal(20, SIGKILL, NULL, 0) = 0
pidfd_send_signal(20, SIGKILL, NULL, 0) = 0
pidfd_send_signal(20, SIGKILL, NULL, 0) = 0
pidfd_send_signal(20, SIGKILL, NULL, 0) = 0
pidfd_send_signal(20, SIGKILL, NULL, 0) = 0
pidfd_send_signal(20, SIGKILL, NULL, 0) = 0
pidfd_send_signal(20, SIGKILL, NULL, 0) = 0
pidfd_send_signal(20, SIGKILL, NULL, 0) = 0
pidfd_send_signal(20, SIGKILL, NULL, 0) = 0
pidfd_send_signal(20, SIGKILL, NULL, 0) = 0
pidfd_send_signal(20, SIGKILL, NULL, 0) = 0
pidfd_send_signal(20, SIGKILL, NULL, 0) = 0
pidfd_send_signal(20, SIGKILL, NULL, 0) = 0
pidfd_send_signal(20, SIGKILL, NULL, 0) = 0
pidfd_send_signal(20, SIGKILL, NULL, 0) = 0
pidfd_send_signal(20, SIGKILL, NULL, 0) = 0
pidfd_send_signal(20, SIGKILL, NULL, 0) = 0
pidfd_send_signal(20, SIGKILL, NULL, 0) = 0
pidfd_send_signal(20, SIGKILL, NULL, 0) = 0
pidfd_send_signal(20, SIGKILL, NULL, 0) = 0
pidfd_send_signal(20, SIGKILL, NULL, 0) = 0
pidfd_send_signal(20, SIGKILL, NULL, 0) = 0
pidfd_send_signal(20, SIGKILL, NULL, 0) = 0
pidfd_send_signal(20, SIGKILL, NULL, 0) = 0
pidfd_send_signal(20, SIGKILL, NULL, 0) = 0
pidfd_send_signal(20, SIGKILL, NULL, 0) = 0
pidfd_send_signal(20, SIGKILL, NULL, 0) = 0
pidfd_send_signal(20, SIGKILL, NULL, 0) = 0
pidfd_send_signal(20, SIGKILL, NULL, 0) = 0

That's about all there is. Nothing interesting in /var/log/syslog or dmesg.

Hope this helps.

Best regards,
Mirsad Todorovac

Comments

Mirsad Todorovac March 9, 2024, 2:25 p.m. UTC | #1
Hi,

There seems to be some additional insight.

Trying to kill the processes so the testsuite might hopefully continue, this was
the result: unkillable (-SIGKILL) processes, which can also not be traced with
strace, and neither the selftest suite continued.

root     1000955    2931  0 01:05 pts/2    00:00:00 ./pidfd_setns_test
root     1000956 1000955 99 01:05 pts/2    14:09:03 [pidfd_setns_tes] <defunct>
root     1037946 1005609  0 15:19 pts/3    00:00:00 grep --color=auto pidfd_setns_tes
root@defiant:/home/marvin/linux/kernel/net-next# strace -p 1000955
strace: Could not attach to process. If your uid matches the uid of the target process, check the setting of /proc/sys/kernel/yama/ptrace_scope, or try again as the root user. For more details, see /etc/sysctl.d/10-ptrace.conf: Operation not permitted
strace: attach: ptrace(PTRACE_SEIZE, 1000955): Operation not permitted
root@defiant:/home/marvin/linux/kernel/net-next# strace -p 1000956
strace: Could not attach to process. If your uid matches the uid of the target process, check the setting of /proc/sys/kernel/yama/ptrace_scope, or try again as the root user. For more details, see /etc/sysctl.d/10-ptrace.conf: Operation not permitted
strace: attach: ptrace(PTRACE_SEIZE, 1000956): Operation not permitted
root@defiant:/home/marvin/linux/kernel/net-next#

Hope this helps.

It would be very interesting to see now what exactly eats 99% of a CPU core, but
I am not enough technologically savvy for this task ATM.

Best regards,
Mirsad Todorovac
Mirsad Todorovac March 9, 2024, 2:29 p.m. UTC | #2
P.S.

Please consider this additional dmesg diagnostics possibly coinciding with the kill -KILL <stale pids>:

[Sat Mar  9 15:18:05 2024] proc-empty-vm[1007004] vsyscall read attempt denied -- look up the vsyscall kernel parameter if you need a workaround ip:5a0754238702 cs:33 sp:7ffed57b6ec0 ax:0 si:0 di:0
[Sat Mar  9 15:18:06 2024] proc-pid-vm[1007025] vsyscall read attempt denied -- look up the vsyscall kernel parameter if you need a workaround ip:5cf038710e22 cs:33 sp:7ffc3cc4ee60 ax:0 si:0 di:0
[Sat Mar  9 15:18:08 2024] ICMPv6: process `read' is using deprecated sysctl (syscall) net.ipv6.neigh.default.base_reachable_time - use net.ipv6.neigh.default.base_reachable_time_ms instead
[Sat Mar  9 15:18:09 2024] sysrq: HELP : loglevel(0-9) reboot(b) crash(c) terminate-all-tasks(e) memory-full-oom-kill(f) kill-all-tasks(i) thaw-filesystems(j) sak(k) show-backtrace-all-active-cpus(l) show-memory-usage(m) nice-all-RT-tasks(n) poweroff(o) show-registers(p) show-all-timers(q) unraw(r) sync(s) show-task-states(t) unmount(u) force-fb(v) show-blocked-tasks(w) dump-ftrace-buffer(z)
[Sat Mar  9 15:18:55 2024] signal: openat2_test[1025119] overflowed sigaltstack
[Sat Mar  9 15:18:55 2024] signal: resolve_test[1025139] overflowed sigaltstack

Best regards,
Mirsad Todorovac
diff mbox series

Patch

diff --git a/tools/testing/selftests/breakpoints/Makefile b/tools/testing/selftests/breakpoints/Makefile
index 9ec2c78de8ca..76a0e3837136 100644
--- a/tools/testing/selftests/breakpoints/Makefile
+++ b/tools/testing/selftests/breakpoints/Makefile
@@ -3,7 +3,7 @@ 
  uname_M := $(shell uname -m 2>/dev/null || echo not)
  ARCH ?= $(shell echo $(uname_M) | sed -e s/i.86/x86/ -e s/x86_64/x86/)
  
-TEST_GEN_PROGS := step_after_suspend_test
+# TEST_GEN_PROGS := step_after_suspend_test
  
  ifeq ($(ARCH),x86)
  TEST_GEN_PROGS += breakpoint_test