exit(EXIT_FAILURE);
}
- pid = lxc_raw_clone(CLONE_NEWUSER | CLONE_NEWCGROUP | CLONE_NEWNS |
- CLONE_NEWIPC | CLONE_NEWNET | CLONE_NEWIPC |
- CLONE_NEWPID | CLONE_NEWUTS);
+ flags |= CLONE_NEWUSER;
+ if (cgns_supported())
+ flags |= CLONE_NEWCGROUP;
+ flags |= CLONE_NEWNS;
+ flags |= CLONE_NEWIPC;
+ flags |= CLONE_NEWNET;
+ flags |= CLONE_NEWIPC;
+ flags |= CLONE_NEWPID;
+ flags |= CLONE_NEWUTS;
+ pid = lxc_raw_clone(flags);
if (pid < 0) {
lxc_error("%s\n", "Failed to call lxc_raw_clone(CLONE_NEWUSER "
"| CLONE_NEWCGROUP | CLONE_NEWNS | "
exit(EXIT_FAILURE);
}
- flags |= CLONE_NEWUSER;
- if (cgns_supported())
- flags |= CLONE_NEWCGROUP;
- flags |= CLONE_NEWNS;
- flags |= CLONE_NEWIPC;
- flags |= CLONE_NEWNET;
- flags |= CLONE_NEWIPC;
- flags |= CLONE_NEWPID;
- flags |= CLONE_NEWUTS;
pid = lxc_raw_clone(flags);
if (pid < 0) {
lxc_error("%s\n", "Failed to call lxc_raw_clone(CLONE_NEWUSER "
status = wait_for_pid(pid);
if (status == 0) {
lxc_error("%s\n", "Failed to retrieve correct exit status");
+ exit(EXIT_FAILURE);
+ }
+
+ pid = lxc_raw_clone(CLONE_VFORK);
+ if (pid < 0) {
+ lxc_error("%s\n", "Failed to call lxc_raw_clone(CLONE_VFORK);");
+ exit(EXIT_FAILURE);
+ }
+
+
+ if (pid == 0) {
+ lxc_error("%s\n", "Child will exit(EXIT_SUCCESS)");
exit(EXIT_SUCCESS);
}
+ status = wait_for_pid(pid);
+ if (status != 0) {
+ lxc_error("%s\n", "Failed to retrieve correct exit status");
+ exit(EXIT_FAILURE);
+ }
+
+ pid = lxc_raw_clone(CLONE_VFORK);
+ if (pid < 0) {
+ lxc_error("%s\n", "Failed to call lxc_raw_clone(CLONE_VFORK);");
+ exit(EXIT_FAILURE);
+ }
+
+
+ if (pid == 0) {
+ lxc_error("%s\n", "Child will exit(EXIT_FAILURE)");
+ exit(EXIT_FAILURE);
+ }
+
+ status = wait_for_pid(pid);
+ if (status == 0) {
+ lxc_error("%s\n", "Failed to retrieve correct exit status");
+ exit(EXIT_FAILURE);
+ }
+
+ pid = lxc_raw_clone(CLONE_FILES);
+ if (pid < 0) {
+ lxc_error("%s\n", "Failed to call lxc_raw_clone(CLONE_FILES);");
+ exit(EXIT_FAILURE);
+ }
+
+
+ if (pid == 0) {
+ lxc_error("%s\n", "Child will exit(EXIT_SUCCESS)");
+ exit(EXIT_SUCCESS);
+ }
+
+ status = wait_for_pid(pid);
+ if (status != 0) {
+ lxc_error("%s\n", "Failed to retrieve correct exit status");
+ exit(EXIT_FAILURE);
+ }
+
+ pid = lxc_raw_clone(CLONE_FILES);
+ if (pid < 0) {
+ lxc_error("%s\n", "Failed to call lxc_raw_clone(CLONE_FILES);");
+ exit(EXIT_FAILURE);
+ }
+
+
+ if (pid == 0) {
+ lxc_error("%s\n", "Child will exit(EXIT_FAILURE)");
+ exit(EXIT_FAILURE);
+ }
+
+ status = wait_for_pid(pid);
+ if (status == 0) {
+ lxc_error("%s\n", "Failed to retrieve correct exit status");
+ exit(EXIT_FAILURE);
+ }
+
lxc_debug("%s\n", "All lxc_raw_clone() tests successful");
exit(EXIT_SUCCESS);
}