Exemplo n.º 1
0
Arquivo: ns.c Projeto: blindFS/criu
int ns_exec(void *_arg)
{
	struct ns_exec_args *args = (struct ns_exec_args *) _arg;
	int ret;

	close(args->status_pipe[0]);

	setsid();

	system("ip link set up dev lo");

	ret = dup2(args->status_pipe[1], STATUS_FD);
	if (ret < 0) {
		fprintf(stderr, "dup2() failed: %m\n");
		return -1;
	}
	close(args->status_pipe[1]);
	if (prepare_mntns())
		return -1;

	setenv("ZDTM_NEWNS", "2", 1);
	execvp(args->argv[0], args->argv);
	fprintf(stderr, "exec(%s) failed: %m\n", args->argv[0]);
	return -1;
}
Exemplo n.º 2
0
Arquivo: ns.c Projeto: cyrillos/criu
static int prepare_namespaces(void)
{
	if (setuid(0) || setgid(0) || setgroups(0, NULL)) {
		fprintf(stderr, "set*id failed: %m\n");
		return -1;
	}

	system("ip link set up dev lo");

	if (prepare_mntns())
		return -1;

	return 0;
}
Exemplo n.º 3
0
int ns_exec(void *_arg)
{
	struct ns_exec_args *args = (struct ns_exec_args *) _arg;
	char buf[4096];
	int ret;

	close(args->status_pipe[0]);

	setsid();

	read(args->status_pipe[1], buf, sizeof(buf));
	shutdown(args->status_pipe[1], SHUT_RD);
	if (setuid(0) || setgid(0)) {
		fprintf(stderr, "set*id failed: %m\n");
		return -1;
	}

	if (prepare_mntns())
		return -1;

	return 0;
}