[PATCH v2 0/2] pid_namespace: make init creation more flexible

Pavel Tikhomirov
2026-02-23T20:03:08Z

The first patch allows to join pid namespace before pid namespace init
is created, that allows to create pid namespace by one process and then
create pid namespace init from another process after setns(). Please see
the detailed description in the patch commit message.

The second patch is a comprehansive test, which tests both basic usecase
of creating pid namespace and init separately, and a more specific
usecase which shows how we can improve clone3(set_tid) usability after
this change.

This is generally useful as it makes clone3(set_tid) more universal, and
work in all the cases evenly. Also is highly useful to CRIU to handle
nested containers.

v2: Use *_ONCE for ->child_reaper accesses atomicity, and avoid taking
task_list lock for reading it. Rebase to master.

This series is also available here:
https://github.com/Snorch/linux/commits/allow-creating-pid-namespace-init-after-setns-v2/

Signed-off-by: Pavel Tikhomirov <ptikhomirov@virtuozzo.com>

Pavel Tikhomirov (2):
pid_namespace: allow opening pid_for_children before init was created
selftests: Add tests for creating pidns init via setns

kernel/exit.c | 2 +-
kernel/fork.c | 2 +-
kernel/pid.c | 5 +-
kernel/pid_namespace.c | 9 -
.../selftests/pid_namespace/.gitignore | 1 +
.../testing/selftests/pid_namespace/Makefile | 2 +-
.../pid_namespace/pidns_init_via_setns.c | 238 ++++++++++++++++++
7 files changed, 245 insertions(+), 14 deletions(-)
create mode 100644 tools/testing/selftests/pid_namespace/pidns_init_via_setns.c

--
2.53.0