diff options
Diffstat (limited to 'testcases/kernel/containers/userns/userns05.c')
-rw-r--r-- | testcases/kernel/containers/userns/userns05.c | 51 |
1 files changed, 22 insertions, 29 deletions
diff --git a/testcases/kernel/containers/userns/userns05.c b/testcases/kernel/containers/userns/userns05.c index 4c16694b1..e7a00af18 100644 --- a/testcases/kernel/containers/userns/userns05.c +++ b/testcases/kernel/containers/userns/userns05.c @@ -18,15 +18,12 @@ #include <stdio.h> #include "tst_test.h" +#include "lapi/sched.h" #include "common.h" -/* - * child_fn1() - Inside a new user namespace - */ -static int child_fn1(void) +static void child_fn1(void) { TST_CHECKPOINT_WAIT(0); - return 0; } static unsigned int getusernsidbypid(int pid) @@ -47,14 +44,21 @@ static unsigned int getusernsidbypid(int pid) static void run(void) { + const struct tst_clone_args args1 = { .exit_signal = SIGCHLD }; + const struct tst_clone_args args2 = { + .flags = CLONE_NEWUSER, + .exit_signal = SIGCHLD, + }; int cpid1, cpid2, cpid3; unsigned int parentuserns, cpid1userns, cpid2userns, newparentuserns; parentuserns = getusernsidbypid(getpid()); - cpid1 = ltp_clone_quick(SIGCHLD, (void *)child_fn1, NULL); - if (cpid1 < 0) - tst_brk(TBROK | TTERRNO, "clone failed"); + cpid1 = SAFE_CLONE(&args1); + if (!cpid1) { + child_fn1(); + return; + } cpid1userns = getusernsidbypid(cpid1); @@ -64,23 +68,20 @@ static void run(void) * CLONE_NEWUSER flag is a member of the same user namespace as its * parent */ - if (parentuserns != cpid1userns) - tst_res(TFAIL, "userns:parent should be equal to cpid1"); - else - tst_res(TPASS, "userns:parent is equal to cpid1"); + TST_EXP_EQ_LI(parentuserns, cpid1userns); - cpid2 = ltp_clone_quick(CLONE_NEWUSER | SIGCHLD, (void *)child_fn1, NULL); - if (cpid2 < 0) - tst_brk(TBROK | TTERRNO, "clone failed"); + cpid2 = SAFE_CLONE(&args2); + if (!cpid2) { + child_fn1(); + return; + } cpid2userns = getusernsidbypid(cpid2); TST_CHECKPOINT_WAKE(0); - if (parentuserns == cpid2userns) - tst_res(TFAIL, "userns:parent should be not equal to cpid2"); - else - tst_res(TPASS, "userns:parent is not equal to cpid2"); + TST_EXP_EXPR(parentuserns != cpid2userns, + "parent namespace != child namespace"); cpid3 = SAFE_FORK(); if (!cpid3) { @@ -91,20 +92,12 @@ static void run(void) * is moved into a new user namespace which is not shared * with any previously existing process */ - if (parentuserns == newparentuserns) - tst_res(TFAIL, "unshared namespaces with same id"); - else - tst_res(TPASS, "unshared namespaces with different id"); + TST_EXP_EXPR(parentuserns != newparentuserns, + "parent namespace != unshared child namespace"); } } -static void setup(void) -{ - check_newuser(); -} - static struct tst_test test = { - .setup = setup, .test_all = run, .needs_root = 1, .forks_child = 1, |