/* Linux-specific program to run its arguments in a new namespace. Must be run as root. Adam Sampson */ #include #include #include #include #include #include #include #include #define __NR_sys_clone __NR_clone _syscall2(int, sys_clone, int, flags, void *, child_stack) int main(int argc, char **argv) { pid_t pid; int status; pid = sys_clone(CLONE_NEWNS | SIGCHLD, 0); if (pid < 0) { perror("clone failed"); return 1; } if (pid == 0) { execvp(argv[1], &argv[1]); perror("execvp failed"); _exit(99); } if (wait(&status) < 0) { perror("wait failed"); return 1; } if (WIFEXITED(status)) { return WEXITSTATUS(status); } else { return 98; } }