public inbox for ltp@lists.linux.it
 help / color / mirror / Atom feed
* [LTP] [PATCH v1 00/10] Remove libclone support from userns testing suite
@ 2023-02-15 10:16 Andrea Cervesato via ltp
  2023-02-15 10:16 ` [LTP] [PATCH v1 01/10] Refactor userns01 test Andrea Cervesato via ltp
                   ` (9 more replies)
  0 siblings, 10 replies; 14+ messages in thread
From: Andrea Cervesato via ltp @ 2023-02-15 10:16 UTC (permalink / raw)
  To: ltp

Removed ltp_clone_quick from userns testing suite and simplified code a bit.

Andrea Cervesato (10):
  Refactor userns01 test
  Refactor userns02 test
  Refactor userns03 test
  Refactor userns04 test
  Refactor userns05 test
  Refactor userns06 test
  Refactor userns07 test
  Remove check_newuser from userns testing suite
  Remove libclone dependency from userns suite
  Delete userns_helper.h from userns suite

 testcases/kernel/containers/userns/Makefile   |  2 +-
 testcases/kernel/containers/userns/common.h   | 20 +-----
 testcases/kernel/containers/userns/userns01.c | 27 +++----
 testcases/kernel/containers/userns/userns02.c | 31 +++-----
 testcases/kernel/containers/userns/userns03.c | 70 +++++++------------
 testcases/kernel/containers/userns/userns04.c | 45 +++++-------
 testcases/kernel/containers/userns/userns05.c | 48 +++++--------
 testcases/kernel/containers/userns/userns06.c | 41 +++++------
 .../containers/userns/userns06_capcheck.c     | 19 +++--
 testcases/kernel/containers/userns/userns07.c | 67 ++++++++++--------
 .../kernel/containers/userns/userns_helper.h  | 59 ----------------
 11 files changed, 146 insertions(+), 283 deletions(-)
 delete mode 100644 testcases/kernel/containers/userns/userns_helper.h

-- 
2.35.3


-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

^ permalink raw reply	[flat|nested] 14+ messages in thread

* [LTP] [PATCH v1 01/10] Refactor userns01 test
  2023-02-15 10:16 [LTP] [PATCH v1 00/10] Remove libclone support from userns testing suite Andrea Cervesato via ltp
@ 2023-02-15 10:16 ` Andrea Cervesato via ltp
  2023-02-28 10:46   ` Richard Palethorpe
  2023-02-15 10:16 ` [LTP] [PATCH v1 02/10] Refactor userns02 test Andrea Cervesato via ltp
                   ` (8 subsequent siblings)
  9 siblings, 1 reply; 14+ messages in thread
From: Andrea Cervesato via ltp @ 2023-02-15 10:16 UTC (permalink / raw)
  To: ltp

Signed-off-by: Andrea Cervesato <andrea.cervesato@suse.com>
---
 testcases/kernel/containers/userns/userns01.c | 27 +++++++------------
 1 file changed, 10 insertions(+), 17 deletions(-)

diff --git a/testcases/kernel/containers/userns/userns01.c b/testcases/kernel/containers/userns/userns01.c
index 8ed7a9f41..cbe0da245 100644
--- a/testcases/kernel/containers/userns/userns01.c
+++ b/testcases/kernel/containers/userns/userns01.c
@@ -20,9 +20,9 @@
 #define _GNU_SOURCE
 
 #include <stdio.h>
-#include "common.h"
 #include "config.h"
 #include <sys/capability.h>
+#include "lapi/sched.h"
 
 #define OVERFLOWUIDPATH "/proc/sys/kernel/overflowuid"
 #define OVERFLOWGIDPATH "/proc/sys/kernel/overflowgid"
@@ -30,10 +30,7 @@
 static long overflowuid;
 static long overflowgid;
 
-/*
- * child_fn1() - Inside a new user namespace
- */
-static int child_fn1(LTP_ATTRIBUTE_UNUSED void *arg)
+static void child_fn1(void)
 {
 	int uid, gid;
 	cap_t caps;
@@ -45,10 +42,8 @@ static int child_fn1(LTP_ATTRIBUTE_UNUSED void *arg)
 
 	tst_res(TINFO, "USERNS test is running in a new user namespace.");
 
-	if (uid != overflowuid || gid != overflowgid)
-		tst_res(TFAIL, "got unexpected uid=%d gid=%d", uid, gid);
-	else
-		tst_res(TPASS, "got expected uid and gid");
+	TST_EXP_EQ_LI(uid, overflowuid);
+	TST_EXP_EQ_LI(gid, overflowgid);
 
 	caps = cap_get_proc();
 
@@ -68,31 +63,29 @@ static int child_fn1(LTP_ATTRIBUTE_UNUSED void *arg)
 		tst_res(TFAIL, "unexpected effective/permitted caps at %d", i);
 	else
 		tst_res(TPASS, "expected capabilities");
-
-	return 0;
 }
 
 static void setup(void)
 {
-	check_newuser();
-
 	SAFE_FILE_SCANF(OVERFLOWUIDPATH, "%ld", &overflowuid);
 	SAFE_FILE_SCANF(OVERFLOWGIDPATH, "%ld", &overflowgid);
 }
 
 static void run(void)
 {
-	int pid;
+	const struct tst_clone_args args = { CLONE_NEWUSER, SIGCHLD };
 
-	pid = ltp_clone_quick(CLONE_NEWUSER | SIGCHLD, child_fn1, NULL);
-	if (pid < 0)
-		tst_brk(TBROK | TTERRNO, "clone failed");
+	if (!SAFE_CLONE(&args)) {
+		child_fn1();
+		return;
+	}
 }
 
 static struct tst_test test = {
 	.setup = setup,
 	.test_all = run,
 	.needs_root = 1,
+	.forks_child = 1,
 	.caps = (struct tst_cap []) {
 		TST_CAP(TST_CAP_DROP, CAP_NET_RAW),
 		{}
-- 
2.35.3


-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [LTP] [PATCH v1 02/10] Refactor userns02 test
  2023-02-15 10:16 [LTP] [PATCH v1 00/10] Remove libclone support from userns testing suite Andrea Cervesato via ltp
  2023-02-15 10:16 ` [LTP] [PATCH v1 01/10] Refactor userns01 test Andrea Cervesato via ltp
@ 2023-02-15 10:16 ` Andrea Cervesato via ltp
  2023-02-15 10:16 ` [LTP] [PATCH v1 03/10] Refactor userns03 test Andrea Cervesato via ltp
                   ` (7 subsequent siblings)
  9 siblings, 0 replies; 14+ messages in thread
From: Andrea Cervesato via ltp @ 2023-02-15 10:16 UTC (permalink / raw)
  To: ltp

Signed-off-by: Andrea Cervesato <andrea.cervesato@suse.com>
---
 testcases/kernel/containers/userns/userns02.c | 31 +++++++------------
 1 file changed, 11 insertions(+), 20 deletions(-)

diff --git a/testcases/kernel/containers/userns/userns02.c b/testcases/kernel/containers/userns/userns02.c
index dd784000e..9d445d986 100644
--- a/testcases/kernel/containers/userns/userns02.c
+++ b/testcases/kernel/containers/userns/userns02.c
@@ -14,13 +14,10 @@
 #define _GNU_SOURCE
 
 #include <stdio.h>
-#include "common.h"
 #include "tst_test.h"
+#include "lapi/sched.h"
 
-/*
- * child_fn1() - Inside a new user namespace
- */
-static int child_fn1(LTP_ATTRIBUTE_UNUSED void *arg)
+static void child_fn1(void)
 {
 	int uid, gid;
 
@@ -29,29 +26,23 @@ static int child_fn1(LTP_ATTRIBUTE_UNUSED void *arg)
 	uid = geteuid();
 	gid = getegid();
 
-	if (uid == 100 && gid == 100)
-		tst_res(TPASS, "got expected uid and gid");
-	else
-		tst_res(TFAIL, "got unexpected uid=%d gid=%d", uid, gid);
-
-	return 0;
-}
-
-static void setup(void)
-{
-	check_newuser();
+	TST_EXP_EQ_LI(uid, 100);
+	TST_EXP_EQ_LI(gid, 100);
 }
 
 static void run(void)
 {
+	const struct tst_clone_args args = { CLONE_NEWUSER, SIGCHLD };
 	int childpid;
 	int parentuid;
 	int parentgid;
 	char path[BUFSIZ];
 
-	childpid = ltp_clone_quick(CLONE_NEWUSER | SIGCHLD, child_fn1, NULL);
-	if (childpid < 0)
-		tst_brk(TBROK | TTERRNO, "clone failed");
+	childpid = SAFE_CLONE(&args);
+	if (!childpid) {
+		child_fn1();
+		return;
+	}
 
 	parentuid = geteuid();
 	parentgid = getegid();
@@ -71,9 +62,9 @@ static void run(void)
 }
 
 static struct tst_test test = {
-	.setup = setup,
 	.test_all = run,
 	.needs_root = 1,
+	.forks_child = 1,
 	.needs_checkpoints = 1,
 	.needs_kconfigs = (const char *[]) {
 		"CONFIG_USER_NS",
-- 
2.35.3


-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [LTP] [PATCH v1 03/10] Refactor userns03 test
  2023-02-15 10:16 [LTP] [PATCH v1 00/10] Remove libclone support from userns testing suite Andrea Cervesato via ltp
  2023-02-15 10:16 ` [LTP] [PATCH v1 01/10] Refactor userns01 test Andrea Cervesato via ltp
  2023-02-15 10:16 ` [LTP] [PATCH v1 02/10] Refactor userns02 test Andrea Cervesato via ltp
@ 2023-02-15 10:16 ` Andrea Cervesato via ltp
  2023-02-15 10:16 ` [LTP] [PATCH v1 04/10] Refactor userns04 test Andrea Cervesato via ltp
                   ` (6 subsequent siblings)
  9 siblings, 0 replies; 14+ messages in thread
From: Andrea Cervesato via ltp @ 2023-02-15 10:16 UTC (permalink / raw)
  To: ltp

Signed-off-by: Andrea Cervesato <andrea.cervesato@suse.com>
---
 testcases/kernel/containers/userns/userns03.c | 70 +++++++------------
 1 file changed, 24 insertions(+), 46 deletions(-)

diff --git a/testcases/kernel/containers/userns/userns03.c b/testcases/kernel/containers/userns/userns03.c
index b90cc09ba..4dd3f1a73 100644
--- a/testcases/kernel/containers/userns/userns03.c
+++ b/testcases/kernel/containers/userns/userns03.c
@@ -32,8 +32,9 @@
 
 #include <stdio.h>
 #include <stdbool.h>
-#include "common.h"
 #include "tst_test.h"
+#include "lapi/sched.h"
+#include "common.h"
 
 #define CHILD1UID 0
 #define CHILD1GID 0
@@ -42,23 +43,12 @@
 #define UID_MAP 0
 #define GID_MAP 1
 
-static int cpid1;
-static int parentuid;
-static int parentgid;
-
-/*
- * child_fn1() - Inside a new user namespace
- */
-static int child_fn1(LTP_ATTRIBUTE_UNUSED void *arg)
+static void child_fn1(void)
 {
 	TST_CHECKPOINT_WAIT(0);
-	return 0;
 }
 
-/*
- * child_fn2() - Inside a new user namespace
- */
-static int child_fn2(LTP_ATTRIBUTE_UNUSED void *arg)
+static void child_fn2(int cpid1, int parentuid, int parentgid)
 {
 	int uid, gid;
 	char cpid1uidpath[BUFSIZ];
@@ -70,12 +60,8 @@ static int child_fn2(LTP_ATTRIBUTE_UNUSED void *arg)
 	uid = geteuid();
 	gid = getegid();
 
-	tst_res(TINFO, "uid=%d, gid=%d", uid, gid);
-
-	if (uid != CHILD2UID || gid != CHILD2GID)
-		tst_res(TFAIL, "unexpected uid=%d gid=%d", uid, gid);
-	else
-		tst_res(TPASS, "expected uid and gid");
+	TST_EXP_EQ_LI(uid, CHILD2UID);
+	TST_EXP_EQ_LI(gid, CHILD2GID);
 
 	/* Get the uid parameters of the child_fn2 process */
 	SAFE_FILE_SCANF("/proc/self/uid_map", "%d %d %d", &idinsidens, &idoutsidens, &length);
@@ -127,32 +113,31 @@ static int child_fn2(LTP_ATTRIBUTE_UNUSED void *arg)
 
 	TST_CHECKPOINT_WAKE(0);
 	TST_CHECKPOINT_WAKE(1);
-
-	return 0;
-}
-
-static void setup(void)
-{
-	check_newuser();
 }
 
 static void run(void)
 {
-	pid_t cpid2;
+	const struct tst_clone_args args = { CLONE_NEWUSER, SIGCHLD };
+	pid_t cpid1, cpid2;
+	uid_t parentuid;
+	gid_t parentgid;
 	char path[BUFSIZ];
 	int fd;
-	int ret;
 
 	parentuid = geteuid();
 	parentgid = getegid();
 
-	cpid1 = ltp_clone_quick(CLONE_NEWUSER | SIGCHLD, 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, child_fn2, NULL);
-	if (cpid2 < 0)
-		tst_brk(TBROK | TTERRNO, "cpid2 clone failed");
+	cpid2 = SAFE_CLONE(&args);
+	if (!cpid2) {
+		child_fn2(cpid1, parentuid, parentgid);
+		return;
+	}
 
 	if (access("/proc/self/setgroups", F_OK) == 0) {
 		sprintf(path, "/proc/%d/setgroups", cpid1);
@@ -168,19 +153,12 @@ static void run(void)
 		 * do so will fail with the error EPERM.)
 		 */
 
-		/* test that setgroups can't be re-enabled */
-		fd = SAFE_OPEN(path, O_WRONLY, 0644);
-		ret = write(fd, "allow", 5);
-
-		if (ret != -1)
-			tst_brk(TBROK, "write action should fail");
-		else if (errno != EPERM)
-			tst_brk(TBROK | TTERRNO, "unexpected error");
+		tst_res(TINFO, "Check if setgroups can be re-enabled");
 
+		fd = SAFE_OPEN(path, O_WRONLY, 0644);
+		TST_EXP_FAIL(write(fd, "allow", 5), EPERM);
 		SAFE_CLOSE(fd);
 
-		tst_res(TPASS, "setgroups can't be re-enabled");
-
 		sprintf(path, "/proc/%d/setgroups", cpid2);
 
 		fd = SAFE_OPEN(path, O_WRONLY, 0644);
@@ -198,9 +176,9 @@ static void run(void)
 }
 
 static struct tst_test test = {
-	.setup = setup,
 	.test_all = run,
 	.needs_root = 1,
+	.forks_child = 1,
 	.needs_checkpoints = 1,
 	.needs_kconfigs = (const char *[]) {
 		"CONFIG_USER_NS",
-- 
2.35.3


-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [LTP] [PATCH v1 04/10] Refactor userns04 test
  2023-02-15 10:16 [LTP] [PATCH v1 00/10] Remove libclone support from userns testing suite Andrea Cervesato via ltp
                   ` (2 preceding siblings ...)
  2023-02-15 10:16 ` [LTP] [PATCH v1 03/10] Refactor userns03 test Andrea Cervesato via ltp
@ 2023-02-15 10:16 ` Andrea Cervesato via ltp
  2023-02-15 10:16 ` [LTP] [PATCH v1 05/10] Refactor userns05 test Andrea Cervesato via ltp
                   ` (5 subsequent siblings)
  9 siblings, 0 replies; 14+ messages in thread
From: Andrea Cervesato via ltp @ 2023-02-15 10:16 UTC (permalink / raw)
  To: ltp

Signed-off-by: Andrea Cervesato <andrea.cervesato@suse.com>
---
 testcases/kernel/containers/userns/userns04.c | 45 +++++++------------
 1 file changed, 17 insertions(+), 28 deletions(-)

diff --git a/testcases/kernel/containers/userns/userns04.c b/testcases/kernel/containers/userns/userns04.c
index d8639502e..58ae7c302 100644
--- a/testcases/kernel/containers/userns/userns04.c
+++ b/testcases/kernel/containers/userns/userns04.c
@@ -15,56 +15,46 @@
 #define _GNU_SOURCE
 
 #include <stdio.h>
-#include "common.h"
 #include "tst_test.h"
-#include "lapi/syscalls.h"
+#include "lapi/sched.h"
 
-static void setup(void)
-{
-	check_newuser();
-	tst_syscall(__NR_setns, -1, 0);
-}
-
-static int child_fn1(LTP_ATTRIBUTE_UNUSED void *arg)
+static void child_fn1(void)
 {
 	TST_CHECKPOINT_WAIT(0);
-	return 0;
 }
 
-static int child_fn2(void *arg)
+static void child_fn2(int fd)
 {
-	TEST(tst_syscall(__NR_setns, ((long)arg), CLONE_NEWUSER));
-	if (TST_RET != -1 || TST_ERR != EPERM)
-		tst_res(TFAIL | TERRNO, "child2 setns() error");
-	else
-		tst_res(TPASS, "child2 setns() failed as expected");
-
+	TST_EXP_FAIL(setns(fd, CLONE_NEWUSER), EPERM);
 	TST_CHECKPOINT_WAIT(1);
-
-	return 0;
 }
 
 static void run(void)
 {
+	const struct tst_clone_args args = { CLONE_NEWUSER, SIGCHLD };
 	pid_t cpid1, cpid2, cpid3;
 	char path[BUFSIZ];
 	int fd;
 
-	cpid1 = ltp_clone_quick(CLONE_NEWUSER | SIGCHLD, (void *)child_fn1, NULL);
-	if (cpid1 < 0)
-		tst_brk(TBROK | TTERRNO, "clone failed");
+	cpid1 = SAFE_CLONE(&args);
+	if (!cpid1) {
+		child_fn1();
+		return;
+	}
 
 	sprintf(path, "/proc/%d/ns/user", cpid1);
 
 	fd = SAFE_OPEN(path, O_RDONLY, 0644);
-	cpid2 = ltp_clone_quick(CLONE_NEWUSER | SIGCHLD, (void *)child_fn2, (void *)((long)fd));
-	if (cpid2 < 0)
-		tst_brk(TBROK | TTERRNO, "clone failed");
 
-	/* child 3 - throw-away process changing ns to child1 */
+	cpid2 = SAFE_CLONE(&args);
+	if (!cpid2) {
+		child_fn2(fd);
+		return;
+	}
+
 	cpid3 = SAFE_FORK();
 	if (!cpid3) {
-		TST_EXP_PASS(tst_syscall(__NR_setns, fd, CLONE_NEWUSER));
+		TST_EXP_PASS(setns(fd, CLONE_NEWUSER));
 		return;
 	}
 
@@ -75,7 +65,6 @@ static void run(void)
 }
 
 static struct tst_test test = {
-	.setup = setup,
 	.test_all = run,
 	.needs_root = 1,
 	.forks_child = 1,
-- 
2.35.3


-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [LTP] [PATCH v1 05/10] Refactor userns05 test
  2023-02-15 10:16 [LTP] [PATCH v1 00/10] Remove libclone support from userns testing suite Andrea Cervesato via ltp
                   ` (3 preceding siblings ...)
  2023-02-15 10:16 ` [LTP] [PATCH v1 04/10] Refactor userns04 test Andrea Cervesato via ltp
@ 2023-02-15 10:16 ` Andrea Cervesato via ltp
  2023-02-15 10:16 ` [LTP] [PATCH v1 06/10] Refactor userns06 test Andrea Cervesato via ltp
                   ` (4 subsequent siblings)
  9 siblings, 0 replies; 14+ messages in thread
From: Andrea Cervesato via ltp @ 2023-02-15 10:16 UTC (permalink / raw)
  To: ltp

Signed-off-by: Andrea Cervesato <andrea.cervesato@suse.com>
---
 testcases/kernel/containers/userns/userns05.c | 48 ++++++++-----------
 1 file changed, 19 insertions(+), 29 deletions(-)

diff --git a/testcases/kernel/containers/userns/userns05.c b/testcases/kernel/containers/userns/userns05.c
index 4c16694b1..36f48fda5 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,18 @@ 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 = { CLONE_NEWUSER, 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 +65,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 +89,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,
-- 
2.35.3


-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [LTP] [PATCH v1 06/10] Refactor userns06 test
  2023-02-15 10:16 [LTP] [PATCH v1 00/10] Remove libclone support from userns testing suite Andrea Cervesato via ltp
                   ` (4 preceding siblings ...)
  2023-02-15 10:16 ` [LTP] [PATCH v1 05/10] Refactor userns05 test Andrea Cervesato via ltp
@ 2023-02-15 10:16 ` Andrea Cervesato via ltp
  2023-02-15 10:16 ` [LTP] [PATCH v1 07/10] Refactor userns07 test Andrea Cervesato via ltp
                   ` (3 subsequent siblings)
  9 siblings, 0 replies; 14+ messages in thread
From: Andrea Cervesato via ltp @ 2023-02-15 10:16 UTC (permalink / raw)
  To: ltp

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


-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [LTP] [PATCH v1 07/10] Refactor userns07 test
  2023-02-15 10:16 [LTP] [PATCH v1 00/10] Remove libclone support from userns testing suite Andrea Cervesato via ltp
                   ` (5 preceding siblings ...)
  2023-02-15 10:16 ` [LTP] [PATCH v1 06/10] Refactor userns06 test Andrea Cervesato via ltp
@ 2023-02-15 10:16 ` Andrea Cervesato via ltp
  2023-02-28 11:23   ` Richard Palethorpe
  2023-02-15 10:16 ` [LTP] [PATCH v1 08/10] Remove check_newuser from userns testing suite Andrea Cervesato via ltp
                   ` (2 subsequent siblings)
  9 siblings, 1 reply; 14+ messages in thread
From: Andrea Cervesato via ltp @ 2023-02-15 10:16 UTC (permalink / raw)
  To: ltp

Signed-off-by: Andrea Cervesato <andrea.cervesato@suse.com>
---
 testcases/kernel/containers/userns/userns07.c | 67 +++++++++++--------
 1 file changed, 38 insertions(+), 29 deletions(-)

diff --git a/testcases/kernel/containers/userns/userns07.c b/testcases/kernel/containers/userns/userns07.c
index 4659de636..3a693b8e3 100644
--- a/testcases/kernel/containers/userns/userns07.c
+++ b/testcases/kernel/containers/userns/userns07.c
@@ -16,80 +16,89 @@
 #include <sys/wait.h>
 #include "common.h"
 #include "tst_test.h"
+#include "lapi/sched.h"
 
 #define MAXNEST 32
 
-static void setup(void)
-{
-	check_newuser();
-}
+static int *level;
 
-static int child_fn1(void *arg)
+static void child_fn1(void)
 {
-	pid_t cpid1;
-	long level = (long)arg;
-	int status;
+	const struct tst_clone_args args = { CLONE_NEWUSER, SIGCHLD };
+	pid_t cpid;
 	int parentuid;
 	int parentgid;
+	int status;
 
 	TST_CHECKPOINT_WAIT(0);
 
-	if (level == MAXNEST) {
+	if (*level == MAXNEST) {
 		tst_res(TPASS, "nested all children");
-		return 0;
+		return;
 	}
 
-	cpid1 = ltp_clone_quick(CLONE_NEWUSER | SIGCHLD, (void *)child_fn1, (void *)(level + 1));
-	if (cpid1 < 0) {
-		tst_res(TFAIL | TERRNO, "level %ld, unexpected error", level);
-		return 1;
+	cpid = SAFE_CLONE(&args);
+	if (!cpid) {
+		*level += 1;
+		child_fn1();
+		return;
 	}
 
 	parentuid = geteuid();
 	parentgid = getegid();
 
-	updatemap(cpid1, UID_MAP, 0, parentuid);
-	updatemap(cpid1, GID_MAP, 0, parentgid);
+	updatemap(cpid, UID_MAP, 0, parentuid);
+	updatemap(cpid, GID_MAP, 0, parentgid);
 
 	TST_CHECKPOINT_WAKE(0);
 
-	SAFE_WAITPID(cpid1, &status, 0);
-
-	if (!WIFEXITED(status) || WEXITSTATUS(status) != 0)
-		tst_brk(TBROK, "child %s", tst_strstatus(status));
-
-	return 0;
+	SAFE_WAITPID(cpid, &status, 0);
 }
 
 static void run(void)
 {
-	pid_t cpid1;
+	const struct tst_clone_args args = { CLONE_NEWUSER, SIGCHLD };
+	pid_t cpid;
 	int parentuid;
 	int parentgid;
 	char path[BUFSIZ];
 
-	cpid1 = ltp_clone_quick(CLONE_NEWUSER | SIGCHLD, (void *)child_fn1, (void *)0);
-	if (cpid1 < 0)
-		tst_brk(TBROK | TTERRNO, "clone failed");
+	cpid = SAFE_CLONE(&args);
+	if (!cpid) {
+		child_fn1();
+		return;
+	}
 
 	parentuid = geteuid();
 	parentgid = getegid();
 
 	if (access("/proc/self/setgroups", F_OK) == 0) {
-		sprintf(path, "/proc/%d/setgroups", cpid1);
+		sprintf(path, "/proc/%d/setgroups", cpid);
 		SAFE_FILE_PRINTF(path, "deny");
 	}
 
-	updatemap(cpid1, UID_MAP, 0, parentuid);
-	updatemap(cpid1, GID_MAP, 0, parentgid);
+	updatemap(cpid, UID_MAP, 0, parentuid);
+	updatemap(cpid, GID_MAP, 0, parentgid);
 
 	TST_CHECKPOINT_WAKE(0);
 }
 
+static void setup(void)
+{
+	level = SAFE_MMAP(NULL, sizeof(int), PROT_READ | PROT_WRITE, MAP_SHARED | MAP_ANONYMOUS, -1, 0);
+}
+
+static void cleanup(void)
+{
+	SAFE_MUNMAP(level, sizeof(int));
+}
+
 static struct tst_test test = {
 	.setup = setup,
+	.cleanup = cleanup,
 	.test_all = run,
 	.needs_root = 1,
+	.forks_child = 1,
 	.needs_checkpoints = 1,
 	.needs_kconfigs = (const char *[]) {
 		"CONFIG_USER_NS",
-- 
2.35.3


-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [LTP] [PATCH v1 08/10] Remove check_newuser from userns testing suite
  2023-02-15 10:16 [LTP] [PATCH v1 00/10] Remove libclone support from userns testing suite Andrea Cervesato via ltp
                   ` (6 preceding siblings ...)
  2023-02-15 10:16 ` [LTP] [PATCH v1 07/10] Refactor userns07 test Andrea Cervesato via ltp
@ 2023-02-15 10:16 ` Andrea Cervesato via ltp
  2023-02-15 10:16 ` [LTP] [PATCH v1 09/10] Remove libclone dependency from userns suite Andrea Cervesato via ltp
  2023-02-15 10:16 ` [LTP] [PATCH v1 10/10] Delete userns_helper.h " Andrea Cervesato via ltp
  9 siblings, 0 replies; 14+ messages in thread
From: Andrea Cervesato via ltp @ 2023-02-15 10:16 UTC (permalink / raw)
  To: ltp

CLONE_NEWUSER is supported from kernel 3.8 and LTP supports all
kernels >= 3.10. For this reason, we can remove any check for
CLONE_NEWUSER support and to make userns common.h a bit simpler.

Signed-off-by: Andrea Cervesato <andrea.cervesato@suse.com>
---
 testcases/kernel/containers/userns/common.h | 20 +-------------------
 1 file changed, 1 insertion(+), 19 deletions(-)

diff --git a/testcases/kernel/containers/userns/common.h b/testcases/kernel/containers/userns/common.h
index 635d0f190..9b3a47b69 100644
--- a/testcases/kernel/containers/userns/common.h
+++ b/testcases/kernel/containers/userns/common.h
@@ -8,35 +8,17 @@
 #define COMMON_H
 
 #include "tst_test.h"
-#include "lapi/sched.h"
 
 #define UID_MAP 0
 #define GID_MAP 1
 
-static int dummy_child(void *v)
-{
-	(void)v;
-	return 0;
-}
-
-static inline void check_newuser(void)
-{
-	int pid, status;
-
-	pid = ltp_clone_quick(CLONE_NEWUSER | SIGCHLD, dummy_child, NULL);
-	if (pid == -1)
-		tst_brk(TCONF | TTERRNO, "CLONE_NEWUSER not supported");
-
-	SAFE_WAIT(&status);
-}
-
 static inline void updatemap(int cpid, int type, int idnum, int parentmappid)
 {
 	char path[BUFSIZ];
 	char content[BUFSIZ];
 	int fd;
 
-	switch(type) {
+	switch (type) {
 	case UID_MAP:
 		sprintf(path, "/proc/%d/uid_map", cpid);
 		break;
-- 
2.35.3


-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [LTP] [PATCH v1 09/10] Remove libclone dependency from userns suite
  2023-02-15 10:16 [LTP] [PATCH v1 00/10] Remove libclone support from userns testing suite Andrea Cervesato via ltp
                   ` (7 preceding siblings ...)
  2023-02-15 10:16 ` [LTP] [PATCH v1 08/10] Remove check_newuser from userns testing suite Andrea Cervesato via ltp
@ 2023-02-15 10:16 ` Andrea Cervesato via ltp
  2023-02-15 10:16 ` [LTP] [PATCH v1 10/10] Delete userns_helper.h " Andrea Cervesato via ltp
  9 siblings, 0 replies; 14+ messages in thread
From: Andrea Cervesato via ltp @ 2023-02-15 10:16 UTC (permalink / raw)
  To: ltp

Signed-off-by: Andrea Cervesato <andrea.cervesato@suse.com>
---
 testcases/kernel/containers/userns/Makefile | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/testcases/kernel/containers/userns/Makefile b/testcases/kernel/containers/userns/Makefile
index 80681096d..018ab000b 100644
--- a/testcases/kernel/containers/userns/Makefile
+++ b/testcases/kernel/containers/userns/Makefile
@@ -21,6 +21,6 @@ top_srcdir		?= ../../../..
 include $(top_srcdir)/include/mk/testcases.mk
 include $(abs_srcdir)/../Makefile.inc
 
-LDLIBS			:= -lclone $(LDLIBS) $(CAP_LIBS)
+LDLIBS			:= $(LDLIBS) $(CAP_LIBS)
 
 include $(top_srcdir)/include/mk/generic_leaf_target.mk
-- 
2.35.3


-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [LTP] [PATCH v1 10/10] Delete userns_helper.h from userns suite
  2023-02-15 10:16 [LTP] [PATCH v1 00/10] Remove libclone support from userns testing suite Andrea Cervesato via ltp
                   ` (8 preceding siblings ...)
  2023-02-15 10:16 ` [LTP] [PATCH v1 09/10] Remove libclone dependency from userns suite Andrea Cervesato via ltp
@ 2023-02-15 10:16 ` Andrea Cervesato via ltp
  9 siblings, 0 replies; 14+ messages in thread
From: Andrea Cervesato via ltp @ 2023-02-15 10:16 UTC (permalink / raw)
  To: ltp

userns_helper.h has been replaced by common.h inside the userns testing
suite.

Signed-off-by: Andrea Cervesato <andrea.cervesato@suse.com>
---
 .../kernel/containers/userns/userns_helper.h  | 59 -------------------
 1 file changed, 59 deletions(-)
 delete mode 100644 testcases/kernel/containers/userns/userns_helper.h

diff --git a/testcases/kernel/containers/userns/userns_helper.h b/testcases/kernel/containers/userns/userns_helper.h
deleted file mode 100644
index be47690ea..000000000
--- a/testcases/kernel/containers/userns/userns_helper.h
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Copyright (c) Huawei Technologies Co., Ltd., 2015
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- *  (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
- * the GNU General Public License for more details.
- */
-
-#include "../libclone/libclone.h"
-#include "test.h"
-#include "safe_macros.h"
-#include <stdbool.h>
-
-#define UID_MAP 0
-#define GID_MAP 1
-
-static int dummy_child(void *v)
-{
-	(void) v;
-	return 0;
-}
-
-static int check_newuser(void)
-{
-	int pid, status;
-
-	pid = do_clone_unshare_test(T_CLONE, CLONE_NEWUSER, dummy_child, NULL);
-	if (pid == -1)
-		tst_brkm(TCONF | TERRNO, NULL, "CLONE_NEWUSER not supported");
-	SAFE_WAIT(NULL, &status);
-
-	return 0;
-}
-
-LTP_ATTRIBUTE_UNUSED static int updatemap(int cpid, bool type, int idnum,
-	int parentmappid, void (*cleanup)(void))
-{
-	char path[BUFSIZ];
-	char content[BUFSIZ];
-	int fd;
-
-	if (type == UID_MAP)
-		sprintf(path, "/proc/%d/uid_map", cpid);
-	else if (type == GID_MAP)
-		sprintf(path, "/proc/%d/gid_map", cpid);
-	else
-		tst_brkm(TBROK, cleanup, "invalid type parameter");
-
-	sprintf(content, "%d %d 1", idnum, parentmappid);
-	fd = SAFE_OPEN(cleanup, path, O_WRONLY, 0644);
-	SAFE_WRITE(cleanup, SAFE_WRITE_ALL, fd, content, strlen(content));
-	SAFE_CLOSE(cleanup, fd);
-	return 0;
-}
-- 
2.35.3


-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

^ permalink raw reply related	[flat|nested] 14+ messages in thread

* Re: [LTP] [PATCH v1 01/10] Refactor userns01 test
  2023-02-15 10:16 ` [LTP] [PATCH v1 01/10] Refactor userns01 test Andrea Cervesato via ltp
@ 2023-02-28 10:46   ` Richard Palethorpe
  2023-02-28 10:52     ` Richard Palethorpe
  0 siblings, 1 reply; 14+ messages in thread
From: Richard Palethorpe @ 2023-02-28 10:46 UTC (permalink / raw)
  To: Andrea Cervesato; +Cc: ltp

Hello,

Andrea Cervesato via ltp <ltp@lists.linux.it> writes:

> Signed-off-by: Andrea Cervesato <andrea.cervesato@suse.com>
> ---
>  testcases/kernel/containers/userns/userns01.c | 27 +++++++------------
>  1 file changed, 10 insertions(+), 17 deletions(-)
>
> diff --git a/testcases/kernel/containers/userns/userns01.c b/testcases/kernel/containers/userns/userns01.c
> index 8ed7a9f41..cbe0da245 100644
> --- a/testcases/kernel/containers/userns/userns01.c
> +++ b/testcases/kernel/containers/userns/userns01.c
> @@ -20,9 +20,9 @@
>  #define _GNU_SOURCE
>  
>  #include <stdio.h>
> -#include "common.h"
>  #include "config.h"
>  #include <sys/capability.h>
> +#include "lapi/sched.h"
>  
>  #define OVERFLOWUIDPATH "/proc/sys/kernel/overflowuid"
>  #define OVERFLOWGIDPATH "/proc/sys/kernel/overflowgid"
> @@ -30,10 +30,7 @@
>  static long overflowuid;
>  static long overflowgid;
>  
> -/*
> - * child_fn1() - Inside a new user namespace
> - */
> -static int child_fn1(LTP_ATTRIBUTE_UNUSED void *arg)
> +static void child_fn1(void)
>  {
>  	int uid, gid;
>  	cap_t caps;
> @@ -45,10 +42,8 @@ static int child_fn1(LTP_ATTRIBUTE_UNUSED void *arg)
>  
>  	tst_res(TINFO, "USERNS test is running in a new user namespace.");
>  
> -	if (uid != overflowuid || gid != overflowgid)
> -		tst_res(TFAIL, "got unexpected uid=%d gid=%d", uid, gid);
> -	else
> -		tst_res(TPASS, "got expected uid and gid");
> +	TST_EXP_EQ_LI(uid, overflowuid);
> +	TST_EXP_EQ_LI(gid, overflowgid);
>  
>  	caps = cap_get_proc();
>  
> @@ -68,31 +63,29 @@ static int child_fn1(LTP_ATTRIBUTE_UNUSED void *arg)
>  		tst_res(TFAIL, "unexpected effective/permitted caps at %d", i);
>  	else
>  		tst_res(TPASS, "expected capabilities");
> -
> -	return 0;
>  }
>  
>  static void setup(void)
>  {
> -	check_newuser();

User namespaces have been in the kernel a long time, but they can be
disabled at compile time.

So we need to check for CONFIG_USER_NS in the kernel config.

> -
>  	SAFE_FILE_SCANF(OVERFLOWUIDPATH, "%ld", &overflowuid);
>  	SAFE_FILE_SCANF(OVERFLOWGIDPATH, "%ld", &overflowgid);
>  }
>  
>  static void run(void)
>  {
> -	int pid;
> +	const struct tst_clone_args args = { CLONE_NEWUSER, SIGCHLD };
>  
> -	pid = ltp_clone_quick(CLONE_NEWUSER | SIGCHLD, child_fn1, NULL);
> -	if (pid < 0)
> -		tst_brk(TBROK | TTERRNO, "clone failed");
> +	if (!SAFE_CLONE(&args)) {
> +		child_fn1();
> +		return;
> +	}
>  }
>  
>  static struct tst_test test = {
>  	.setup = setup,
>  	.test_all = run,
>  	.needs_root = 1,
> +	.forks_child = 1,
>  	.caps = (struct tst_cap []) {
>  		TST_CAP(TST_CAP_DROP, CAP_NET_RAW),
>  		{}
> -- 
> 2.35.3


-- 
Thank you,
Richard.

-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [LTP] [PATCH v1 01/10] Refactor userns01 test
  2023-02-28 10:46   ` Richard Palethorpe
@ 2023-02-28 10:52     ` Richard Palethorpe
  0 siblings, 0 replies; 14+ messages in thread
From: Richard Palethorpe @ 2023-02-28 10:52 UTC (permalink / raw)
  To: Andrea Cervesato; +Cc: ltp

Hello,

Richard Palethorpe <rpalethorpe@suse.de> writes:

> Hello,
>
> Andrea Cervesato via ltp <ltp@lists.linux.it> writes:
>
>> Signed-off-by: Andrea Cervesato <andrea.cervesato@suse.com>
>> ---
>>  testcases/kernel/containers/userns/userns01.c | 27 +++++++------------
>>  1 file changed, 10 insertions(+), 17 deletions(-)
>>
>> diff --git a/testcases/kernel/containers/userns/userns01.c b/testcases/kernel/containers/userns/userns01.c
>> index 8ed7a9f41..cbe0da245 100644
>> --- a/testcases/kernel/containers/userns/userns01.c
>> +++ b/testcases/kernel/containers/userns/userns01.c
>> @@ -20,9 +20,9 @@
>>  #define _GNU_SOURCE
>>  
>>  #include <stdio.h>
>> -#include "common.h"
>>  #include "config.h"
>>  #include <sys/capability.h>
>> +#include "lapi/sched.h"
>>  
>>  #define OVERFLOWUIDPATH "/proc/sys/kernel/overflowuid"
>>  #define OVERFLOWGIDPATH "/proc/sys/kernel/overflowgid"
>> @@ -30,10 +30,7 @@
>>  static long overflowuid;
>>  static long overflowgid;
>>  
>> -/*
>> - * child_fn1() - Inside a new user namespace
>> - */
>> -static int child_fn1(LTP_ATTRIBUTE_UNUSED void *arg)
>> +static void child_fn1(void)
>>  {
>>  	int uid, gid;
>>  	cap_t caps;
>> @@ -45,10 +42,8 @@ static int child_fn1(LTP_ATTRIBUTE_UNUSED void *arg)
>>  
>>  	tst_res(TINFO, "USERNS test is running in a new user namespace.");
>>  
>> -	if (uid != overflowuid || gid != overflowgid)
>> -		tst_res(TFAIL, "got unexpected uid=%d gid=%d", uid, gid);
>> -	else
>> -		tst_res(TPASS, "got expected uid and gid");
>> +	TST_EXP_EQ_LI(uid, overflowuid);
>> +	TST_EXP_EQ_LI(gid, overflowgid);
>>  
>>  	caps = cap_get_proc();
>>  
>> @@ -68,31 +63,29 @@ static int child_fn1(LTP_ATTRIBUTE_UNUSED void *arg)
>>  		tst_res(TFAIL, "unexpected effective/permitted caps at %d", i);
>>  	else
>>  		tst_res(TPASS, "expected capabilities");
>> -
>> -	return 0;
>>  }
>>  
>>  static void setup(void)
>>  {
>> -	check_newuser();
>
> User namespaces have been in the kernel a long time, but they can be
> disabled at compile time.
>
> So we need to check for CONFIG_USER_NS in the kernel config.

Ah, ignore that, I see it's already there.

>
>> -
>>  	SAFE_FILE_SCANF(OVERFLOWUIDPATH, "%ld", &overflowuid);
>>  	SAFE_FILE_SCANF(OVERFLOWGIDPATH, "%ld", &overflowgid);
>>  }
>>  
>>  static void run(void)
>>  {
>> -	int pid;
>> +	const struct tst_clone_args args = { CLONE_NEWUSER, SIGCHLD };
>>  
>> -	pid = ltp_clone_quick(CLONE_NEWUSER | SIGCHLD, child_fn1, NULL);
>> -	if (pid < 0)
>> -		tst_brk(TBROK | TTERRNO, "clone failed");
>> +	if (!SAFE_CLONE(&args)) {
>> +		child_fn1();
>> +		return;
>> +	}
>>  }
>>  
>>  static struct tst_test test = {
>>  	.setup = setup,
>>  	.test_all = run,
>>  	.needs_root = 1,
>> +	.forks_child = 1,
>>  	.caps = (struct tst_cap []) {
>>  		TST_CAP(TST_CAP_DROP, CAP_NET_RAW),
>>  		{}
>> -- 
>> 2.35.3


-- 
Thank you,
Richard.

-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [LTP] [PATCH v1 07/10] Refactor userns07 test
  2023-02-15 10:16 ` [LTP] [PATCH v1 07/10] Refactor userns07 test Andrea Cervesato via ltp
@ 2023-02-28 11:23   ` Richard Palethorpe
  0 siblings, 0 replies; 14+ messages in thread
From: Richard Palethorpe @ 2023-02-28 11:23 UTC (permalink / raw)
  To: Andrea Cervesato; +Cc: ltp

Hello,

All merged, thanks!

This one I made some changes to, please see below.

Andrea Cervesato via ltp <ltp@lists.linux.it> writes:

> Signed-off-by: Andrea Cervesato <andrea.cervesato@suse.com>
> ---
>  testcases/kernel/containers/userns/userns07.c | 67 +++++++++++--------
>  1 file changed, 38 insertions(+), 29 deletions(-)
>
> diff --git a/testcases/kernel/containers/userns/userns07.c b/testcases/kernel/containers/userns/userns07.c
> index 4659de636..3a693b8e3 100644
> --- a/testcases/kernel/containers/userns/userns07.c
> +++ b/testcases/kernel/containers/userns/userns07.c
> @@ -16,80 +16,89 @@
>  #include <sys/wait.h>
>  #include "common.h"
>  #include "tst_test.h"
> +#include "lapi/sched.h"
>  
>  #define MAXNEST 32
>  
> -static void setup(void)
> -{
> -	check_newuser();
> -}
> +static int *level;

AFAICT we do not need this variable and to use mmap. We can just pass an
int to child_fn1.

Unless you wanted to check at the end of the test that level == 32?
However you weren't doing that, so I just removed it.

>  
> -static int child_fn1(void *arg)
> +static void child_fn1(void)
>  {
> -	pid_t cpid1;
> -	long level = (long)arg;
> -	int status;
> +	const struct tst_clone_args args = { CLONE_NEWUSER, SIGCHLD };
> +	pid_t cpid;
>  	int parentuid;
>  	int parentgid;
> +	int status;
>  
>  	TST_CHECKPOINT_WAIT(0);
>  
> -	if (level == MAXNEST) {
> +	if (*level == MAXNEST) {
>  		tst_res(TPASS, "nested all children");
> -		return 0;
> +		return;
>  	}
>  
> -	cpid1 = ltp_clone_quick(CLONE_NEWUSER | SIGCHLD, (void *)child_fn1, (void *)(level + 1));
> -	if (cpid1 < 0) {
> -		tst_res(TFAIL | TERRNO, "level %ld, unexpected error", level);
> -		return 1;
> +	cpid = SAFE_CLONE(&args);
> +	if (!cpid) {
> +		*level += 1;
> +		child_fn1();
> +		return;
>  	}
>  
>  	parentuid = geteuid();
>  	parentgid = getegid();
>  
> -	updatemap(cpid1, UID_MAP, 0, parentuid);
> -	updatemap(cpid1, GID_MAP, 0, parentgid);
> +	updatemap(cpid, UID_MAP, 0, parentuid);
> +	updatemap(cpid, GID_MAP, 0, parentgid);
>  
>  	TST_CHECKPOINT_WAKE(0);
>  
> -	SAFE_WAITPID(cpid1, &status, 0);
> -
> -	if (!WIFEXITED(status) || WEXITSTATUS(status) != 0)
> -		tst_brk(TBROK, "child %s", tst_strstatus(status));
> -
> -	return 0;
> +	SAFE_WAITPID(cpid, &status, 0);

replaced with tst_reap_children.

>  }
>  
>  static void run(void)
>  {
> -	pid_t cpid1;
> +	const struct tst_clone_args args = { CLONE_NEWUSER, SIGCHLD };
> +	pid_t cpid;
>  	int parentuid;
>  	int parentgid;
>  	char path[BUFSIZ];
>  
> -	cpid1 = ltp_clone_quick(CLONE_NEWUSER | SIGCHLD, (void *)child_fn1, (void *)0);
> -	if (cpid1 < 0)
> -		tst_brk(TBROK | TTERRNO, "clone failed");
> +	cpid = SAFE_CLONE(&args);
> +	if (!cpid) {
> +		child_fn1();
> +		return;
> +	}
>  
>  	parentuid = geteuid();
>  	parentgid = getegid();
>  
>  	if (access("/proc/self/setgroups", F_OK) == 0) {
> -		sprintf(path, "/proc/%d/setgroups", cpid1);
> +		sprintf(path, "/proc/%d/setgroups", cpid);
>  		SAFE_FILE_PRINTF(path, "deny");
>  	}
>  
> -	updatemap(cpid1, UID_MAP, 0, parentuid);
> -	updatemap(cpid1, GID_MAP, 0, parentgid);
> +	updatemap(cpid, UID_MAP, 0, parentuid);
> +	updatemap(cpid, GID_MAP, 0, parentgid);
>  
>  	TST_CHECKPOINT_WAKE(0);
>  }
>  
> +static void setup(void)
> +{
> +	level = SAFE_MMAP(NULL, sizeof(int), PROT_READ | PROT_WRITE, MAP_SHARED | MAP_ANONYMOUS, -1, 0);
> +}
> +
> +static void cleanup(void)
> +{
> +	SAFE_MUNMAP(level, sizeof(int));
> +}
> +
>  static struct tst_test test = {
>  	.setup = setup,
> +	.cleanup = cleanup,
>  	.test_all = run,
>  	.needs_root = 1,
> +	.forks_child = 1,
>  	.needs_checkpoints = 1,
>  	.needs_kconfigs = (const char *[]) {
>  		"CONFIG_USER_NS",
> -- 
> 2.35.3


-- 
Thank you,
Richard.

-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

^ permalink raw reply	[flat|nested] 14+ messages in thread

end of thread, other threads:[~2023-02-28 11:28 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-02-15 10:16 [LTP] [PATCH v1 00/10] Remove libclone support from userns testing suite Andrea Cervesato via ltp
2023-02-15 10:16 ` [LTP] [PATCH v1 01/10] Refactor userns01 test Andrea Cervesato via ltp
2023-02-28 10:46   ` Richard Palethorpe
2023-02-28 10:52     ` Richard Palethorpe
2023-02-15 10:16 ` [LTP] [PATCH v1 02/10] Refactor userns02 test Andrea Cervesato via ltp
2023-02-15 10:16 ` [LTP] [PATCH v1 03/10] Refactor userns03 test Andrea Cervesato via ltp
2023-02-15 10:16 ` [LTP] [PATCH v1 04/10] Refactor userns04 test Andrea Cervesato via ltp
2023-02-15 10:16 ` [LTP] [PATCH v1 05/10] Refactor userns05 test Andrea Cervesato via ltp
2023-02-15 10:16 ` [LTP] [PATCH v1 06/10] Refactor userns06 test Andrea Cervesato via ltp
2023-02-15 10:16 ` [LTP] [PATCH v1 07/10] Refactor userns07 test Andrea Cervesato via ltp
2023-02-28 11:23   ` Richard Palethorpe
2023-02-15 10:16 ` [LTP] [PATCH v1 08/10] Remove check_newuser from userns testing suite Andrea Cervesato via ltp
2023-02-15 10:16 ` [LTP] [PATCH v1 09/10] Remove libclone dependency from userns suite Andrea Cervesato via ltp
2023-02-15 10:16 ` [LTP] [PATCH v1 10/10] Delete userns_helper.h " Andrea Cervesato via ltp

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox