[CRIU] [PATCH 11/14] zdtm: create devices before forking a test process
Andrey Vagin
avagin at openvz.org
Tue Oct 14 04:38:25 PDT 2014
Devices can not be created in a new user namespace.
Signed-off-by: Andrey Vagin <avagin at openvz.org>
---
test/zdtm/lib/ns.c | 52 ++++++++++++++++++++++++++++++++++++++++++++--------
1 file changed, 44 insertions(+), 8 deletions(-)
diff --git a/test/zdtm/lib/ns.c b/test/zdtm/lib/ns.c
index 40e7005..a7e3261 100644
--- a/test/zdtm/lib/ns.c
+++ b/test/zdtm/lib/ns.c
@@ -100,14 +100,6 @@ static int prepare_mntns()
}
close(dfd);
- mkdir("/dev", 0777);
- mknod("/dev/null", 0777 | S_IFCHR, makedev(1, 3));
- chmod("/dev/null", 0777);
- mkdir("/dev/net", 0777);
- mknod("/dev/net/tun", 0777 | S_IFCHR, makedev(10, 200));
- chmod("/dev/net/tun", 0777);
- mknod("/dev/rtc", 0777 | S_IFCHR, makedev(254, 0));
- chmod("/dev/rtc", 0777);
return 0;
}
@@ -299,6 +291,46 @@ int ns_init(int argc, char **argv)
exit(1);
}
+static int construct_root()
+{
+ char *root;
+ int dfd;
+
+ root = getenv("ZDTM_ROOT");
+ if (!root) {
+ fprintf(stderr, "ZDTM_ROOT isn't set\n");
+ return -1;
+ }
+
+ dfd = open(".", O_RDONLY);
+ if (dfd == -1) {
+ fprintf(stderr, "open(.) failed: %m\n");
+ return -1;
+ }
+ if (chdir(root)) {
+ fprintf(stderr, "chdir(%s): %m\n", root);
+ return -1;
+ }
+
+ mkdir("dev", 0777);
+ chmod("dev", 0777);
+ mknod("dev/null", 0777 | S_IFCHR, makedev(1, 3));
+ chmod("dev/null", 0777);
+ mkdir("dev/net", 0777);
+ mknod("dev/net/tun", 0777 | S_IFCHR, makedev(10, 200));
+ chmod("dev/net/tun", 0777);
+ mknod("dev/rtc", 0777 | S_IFCHR, makedev(254, 0));
+ chmod("dev/rtc", 0777);
+
+ if (fchdir(dfd)) {
+ fprintf(stderr, "fchdir() failed: %m\n");
+ return -1;
+ }
+ close(dfd);
+
+ return 0;
+}
+
void ns_create(int argc, char **argv)
{
pid_t pid;
@@ -314,6 +346,10 @@ void ns_create(int argc, char **argv)
fprintf(stderr, "Pipe() failed %m\n");
exit(1);
}
+
+ if (construct_root())
+ exit(1);
+
pid = clone(ns_exec, args.stack_ptr,
CLONE_NEWPID | CLONE_NEWNS | CLONE_NEWUTS |
CLONE_NEWNET | CLONE_NEWIPC | SIGCHLD, &args);
--
1.9.3
More information about the CRIU
mailing list