diff options
Diffstat (limited to 'testcases/kernel/containers/pidns/pidns12.c')
-rw-r--r-- | testcases/kernel/containers/pidns/pidns12.c | 29 |
1 files changed, 19 insertions, 10 deletions
diff --git a/testcases/kernel/containers/pidns/pidns12.c b/testcases/kernel/containers/pidns/pidns12.c index fb1ec90ca..1811dbc36 100644 --- a/testcases/kernel/containers/pidns/pidns12.c +++ b/testcases/kernel/containers/pidns/pidns12.c @@ -25,11 +25,11 @@ static void child_signal_handler(LTP_ATTRIBUTE_UNUSED int sig, siginfo_t *si, LT sig_pid = si->si_pid; } -static int child_func(LTP_ATTRIBUTE_UNUSED void *arg) +static void child_func(void) { struct sigaction sa; - TST_EXP_EQ_LI(getpid(), 1); + TST_EXP_EQ_LI(tst_getpid(), 1); TST_EXP_EQ_LI(getppid(), 0); sa.sa_flags = SA_SIGINFO; @@ -41,21 +41,25 @@ static int child_func(LTP_ATTRIBUTE_UNUSED void *arg) TST_CHECKPOINT_WAKE_AND_WAIT(0); TST_EXP_EQ_LI(sig_pid, 0); - - return 0; } static void run(void) { - int ret; - - ret = ltp_clone_quick(CLONE_NEWPID | SIGCHLD, child_func, NULL); - if (ret < 0) - tst_brk(TBROK | TERRNO, "clone failed"); + const struct tst_clone_args args = { + .flags = CLONE_NEWPID, + .exit_signal = SIGCHLD, + }; + int pid; + + pid = SAFE_CLONE(&args); + if (!pid) { + child_func(); + return; + } TST_CHECKPOINT_WAIT(0); - SAFE_KILL(ret, SIGUSR1); + SAFE_KILL(pid, SIGUSR1); TST_CHECKPOINT_WAKE(0); } @@ -63,5 +67,10 @@ static void run(void) static struct tst_test test = { .test_all = run, .needs_root = 1, + .forks_child = 1, .needs_checkpoints = 1, + .needs_kconfigs = (const char *[]) { + "CONFIG_PID_NS", + NULL, + }, }; |