selftests: mptcp: join: properly kill background tasks

commit 852b644acbce1529307a4bb283752c4e77b5cda7 upstream.

The 'run_tests' function is executed in the background, but killing its
associated PID would not kill the children tasks running in the
background.

To properly kill all background tasks, 'kill -- -PID' could be used, but
this requires kill from procps-ng. Instead, all children tasks are
listed using 'ps', and 'kill' is called with all PIDs of this group.

Fixes: 31ee4ad86afd ("selftests: mptcp: join: stop transfer when check is done (part 1)")
Cc: stable@vger.kernel.org
Fixes: 04b57c9e096a ("selftests: mptcp: join: stop transfer when check is done (part 2)")
Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
Link: https://patch.msgid.link/20251110-net-mptcp-sft-join-unstable-v1-6-a4332c714e10@kernel.org
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
[ Conflicts in mptcp_join.sh, because commit e3b47e460b4b ("selftests:
  mptcp: userspace pm remove initial subflow") and commit b9fb176081fb
  ("selftests: mptcp: userspace pm send RM_ADDR for ID 0") are not in
  this version. They introduced new subtests that got modified by this
  patch. That's OK, no need to modify them if they are not there: the
  conflicts can be dropped. ]
Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
Matthieu Baerts (NGI0)
2025-11-27 19:28:11 +01:00
committed by Greg Kroah-Hartman
parent f12f4c6576
commit b77075c08d
2 changed files with 28 additions and 7 deletions

View File

@@ -3679,7 +3679,7 @@ userspace_tests()
chk_mptcp_info subflows 0 subflows 0
chk_subflows_total 1 1
kill_events_pids
mptcp_lib_kill_wait $tests_pid
mptcp_lib_kill_group_wait $tests_pid
fi
# userspace pm create destroy subflow
@@ -3707,7 +3707,7 @@ userspace_tests()
chk_mptcp_info subflows 0 subflows 0
chk_subflows_total 1 1
kill_events_pids
mptcp_lib_kill_wait $tests_pid
mptcp_lib_kill_group_wait $tests_pid
fi
# userspace pm create id 0 subflow
@@ -3728,7 +3728,7 @@ userspace_tests()
chk_mptcp_info subflows 1 subflows 1
chk_subflows_total 2 2
kill_events_pids
mptcp_lib_kill_wait $tests_pid
mptcp_lib_kill_group_wait $tests_pid
fi
}
@@ -3758,7 +3758,7 @@ endpoint_tests()
pm_nl_add_endpoint $ns2 10.0.2.2 flags signal
pm_nl_check_endpoint "modif is allowed" \
$ns2 10.0.2.2 id 1 flags signal
mptcp_lib_kill_wait $tests_pid
mptcp_lib_kill_group_wait $tests_pid
fi
if reset_with_tcp_filter "delete and re-add" ns2 10.0.3.2 REJECT OUTPUT &&
@@ -3813,7 +3813,7 @@ endpoint_tests()
chk_mptcp_info subflows 3 subflows 3
done
mptcp_lib_kill_wait $tests_pid
mptcp_lib_kill_group_wait $tests_pid
kill_events_pids
chk_evt_nr ns1 MPTCP_LIB_EVENT_LISTENER_CREATED 1
@@ -3886,7 +3886,7 @@ endpoint_tests()
wait_mpj $ns2
chk_subflow_nr "after re-re-add ID 0" 3
chk_mptcp_info subflows 3 subflows 3
mptcp_lib_kill_wait $tests_pid
mptcp_lib_kill_group_wait $tests_pid
kill_events_pids
chk_evt_nr ns1 MPTCP_LIB_EVENT_LISTENER_CREATED 1
@@ -3933,7 +3933,7 @@ endpoint_tests()
wait_mpj $ns2
pm_nl_add_endpoint $ns1 10.0.3.1 id 2 flags signal
wait_mpj $ns2
mptcp_lib_kill_wait $tests_pid
mptcp_lib_kill_group_wait $tests_pid
chk_join_nr 2 2 2
chk_add_nr 2 2

View File

@@ -242,6 +242,27 @@ mptcp_lib_kill_wait() {
wait "${1}" 2>/dev/null
}
# $1: PID
mptcp_lib_pid_list_children() {
local curr="${1}"
# evoke 'ps' only once
local pids="${2:-"$(ps o pid,ppid)"}"
echo "${curr}"
local pid
for pid in $(echo "${pids}" | awk "\$2 == ${curr} { print \$1 }"); do
mptcp_lib_pid_list_children "${pid}" "${pids}"
done
}
# $1: PID
mptcp_lib_kill_group_wait() {
# Some users might not have procps-ng: cannot use "kill -- -PID"
mptcp_lib_pid_list_children "${1}" | xargs -r kill &>/dev/null
wait "${1}" 2>/dev/null
}
# $1: IP address
mptcp_lib_is_v6() {
[ -z "${1##*:*}" ]