[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