[LTP] [PATCH v1 06/10] Refactor userns06 test
Andrea Cervesato
andrea.cervesato@suse.com
Wed Feb 15 11:16:11 CET 2023
Signed-off-by: Andrea Cervesato <andrea.cervesato@suse.com>
---
testcases/kernel/containers/userns/userns06.c | 41 ++++++++-----------
.../containers/userns/userns06_capcheck.c | 19 ++++-----
2 files changed, 25 insertions(+), 35 deletions(-)
diff --git a/testcases/kernel/containers/userns/userns06.c b/testcases/kernel/containers/userns/userns06.c
index 39f02e38a..a2c51f725 100644
--- a/testcases/kernel/containers/userns/userns06.c
+++ b/testcases/kernel/containers/userns/userns06.c
@@ -20,6 +20,7 @@
#define _GNU_SOURCE
#include <stdio.h>
+#include "lapi/sched.h"
#include "common.h"
#define TEST_APP "userns06_capcheck"
@@ -29,7 +30,7 @@
#define CHILD2UID 200
#define CHILD2GID 200
-static int child_fn1(void)
+static void child_fn1(void)
{
char *const args[] = { TEST_APP, "privileged", NULL };
int ret;
@@ -39,11 +40,9 @@ static int child_fn1(void)
ret = execv(args[0], args);
if (ret == -1)
tst_brk(TBROK | TERRNO, "execv: unexpected error");
-
- return 0;
}
-static int child_fn2(void)
+static void child_fn2(void)
{
int uid, gid, ret;
char *const args[] = { TEST_APP, "unprivileged", NULL };
@@ -53,27 +52,17 @@ static int child_fn2(void)
uid = geteuid();
gid = getegid();
- if (uid != CHILD2UID || gid != CHILD2GID) {
- tst_res(TFAIL, "unexpected uid=%d gid=%d", uid, gid);
- return 1;
- }
-
- tst_res(TPASS, "expected uid and gid");
+ TST_EXP_EQ_LI(uid, CHILD2UID);
+ TST_EXP_EQ_LI(gid, CHILD2GID);
ret = execv(args[0], args);
if (ret == -1)
tst_brk(TBROK | TERRNO, "execv: unexpected error");
-
- return 0;
-}
-
-static void setup(void)
-{
- check_newuser();
}
static void run(void)
{
+ const struct tst_clone_args args = { CLONE_NEWUSER, SIGCHLD };
pid_t cpid1;
pid_t cpid2;
int parentuid;
@@ -84,13 +73,17 @@ static void run(void)
parentuid = geteuid();
parentgid = getegid();
- cpid1 = ltp_clone_quick(CLONE_NEWUSER | SIGCHLD, (void *)child_fn1, NULL);
- if (cpid1 < 0)
- tst_brk(TBROK | TTERRNO, "cpid1 clone failed");
+ cpid1 = SAFE_CLONE(&args);
+ if (!cpid1) {
+ child_fn1();
+ return;
+ }
- cpid2 = ltp_clone_quick(CLONE_NEWUSER | SIGCHLD, (void *)child_fn2, NULL);
- if (cpid2 < 0)
- tst_brk(TBROK | TTERRNO, "cpid2 clone failed");
+ cpid2 = SAFE_CLONE(&args);
+ if (!cpid2) {
+ child_fn2();
+ return;
+ }
if (access("/proc/self/setgroups", F_OK) == 0) {
sprintf(path, "/proc/%d/setgroups", cpid1);
@@ -117,9 +110,9 @@ static void run(void)
}
static struct tst_test test = {
- .setup = setup,
.test_all = run,
.needs_root = 1,
+ .forks_child = 1,
.needs_checkpoints = 1,
.resource_files = (const char *[]) {
TEST_APP,
diff --git a/testcases/kernel/containers/userns/userns06_capcheck.c b/testcases/kernel/containers/userns/userns06_capcheck.c
index c048ef63f..8669657b9 100644
--- a/testcases/kernel/containers/userns/userns06_capcheck.c
+++ b/testcases/kernel/containers/userns/userns06_capcheck.c
@@ -24,8 +24,8 @@ int main(int argc, char *argv[])
{
cap_t caps;
int i, last_cap;
- cap_flag_value_t flag_val;
- cap_flag_value_t expected_flag = 1;
+ cap_flag_value_t cap_flag;
+ cap_flag_value_t expected_cap_flag = 1;
tst_reinit();
@@ -35,24 +35,21 @@ int main(int argc, char *argv[])
SAFE_FILE_SCANF("/proc/sys/kernel/cap_last_cap", "%d", &last_cap);
if (strcmp("privileged", argv[1]))
- expected_flag = 0;
+ expected_cap_flag = 0;
caps = cap_get_proc();
for (i = 0; i <= last_cap; i++) {
- cap_get_flag(caps, i, CAP_EFFECTIVE, &flag_val);
- if (flag_val != expected_flag)
+ cap_get_flag(caps, i, CAP_EFFECTIVE, &cap_flag);
+ if (cap_flag != expected_cap_flag)
break;
- cap_get_flag(caps, i, CAP_PERMITTED, &flag_val);
- if (flag_val != expected_flag)
+ cap_get_flag(caps, i, CAP_PERMITTED, &cap_flag);
+ if (cap_flag != expected_cap_flag)
break;
}
- if (flag_val != expected_flag)
- tst_res(TFAIL, "unexpected effective/permitted caps at %d", i);
- else
- tst_res(TPASS, "expected caps at %d", i);
+ TST_EXP_EQ_LI(cap_flag, expected_cap_flag);
return 0;
}
--
2.35.3
More information about the ltp
mailing list