diff --git a/starter/ns_exec.c b/starter/ns_exec.c index 8503837..08eedc0 100644 --- a/starter/ns_exec.c +++ b/starter/ns_exec.c @@ -12,14 +12,14 @@ static void procfs_prepare() #define put_old "oldfs" void mnt_prepare(char* rootfs, char* shared_mountpoint) { - char* shared_folder=NULL; - asprintf(&shared_folder,"../%s",shared_mountpoint); - if (mount(rootfs,rootfs,"ext4",MS_BIND,"")) die("failed to mount %s: %m", rootfs); + char* shared_folder = NULL; + asprintf(&shared_folder, "../%s", shared_mountpoint); + if (mount(rootfs, rootfs, "ext4", MS_BIND,"")) die("failed to mount %s: %m", rootfs); if (chdir(rootfs)) die("falied to cd:%m"); //if (mount("/sys","sys","sysfs",0,"")) die("failed to mount sysfs: %m"); //if (mount("/dev","dev","udev",0,"")) die("failed to mount: %m"); if (mkdir("shared", 0777) && errno != EEXIST) die("Failed to mkdir %s: %m\n", shared_mountpoint); - if (mount(shared_folder,"shared","ext4",MS_BIND,"")) die("failed to mount shared folder: %m"); + if (mount(shared_folder, "shared", "ext4", MS_BIND, "")) die("failed to mount shared folder: %m"); if (mkdir(put_old, 0000) && errno != EEXIST) die("Failed to mkdir %s: %m\n", put_old); if (syscall(SYS_pivot_root, ".", put_old)) die("Failed to pivot_root from %s to %s: %m\n", rootfs, put_old); if (chdir("/")) die("Failed to chdir to new root: %m\n"); @@ -30,14 +30,12 @@ void mnt_prepare(char* rootfs, char* shared_mountpoint) { } void ro_fs(char* shared_mountpoint) { char* shared_folder = malloc(strlen(shared_mountpoint)+4); - strcpy(shared_folder,"../"); - strcat(shared_folder,shared_mountpoint); - if (mount("/","/","ext4",MS_REMOUNT | MS_RDONLY| MS_BIND,"")) die("failed to mount: %m"); - if (mount(shared_mountpoint,"shared","ext4",MS_REMOUNT | MS_BIND,"")) die("failed to mount: %m"); + strcpy(shared_folder, "../"); + strcat(shared_folder, shared_mountpoint); + if (mount("/", "/", "ext4", MS_REMOUNT | MS_RDONLY| MS_BIND, "")) die("failed to mount: %m"); + if (mount(shared_mountpoint, "shared", "ext4", MS_REMOUNT | MS_BIND, "")) die("failed to mount: %m"); free(shared_folder); } -//#undef shared_mountpoint -//#undef shared_folder #undef put_old void await_setup(int pipe) { // wait for signal from parent @@ -51,20 +49,20 @@ static int nsrun(void* arg) { struct params *params = (struct params*) arg; await_setup(params->fd[0]); char cwd[PATH_MAX]; - if(getcwd(cwd,sizeof(cwd))==NULL) die("getcwd error: %m"); + if(getcwd(cwd, sizeof(cwd))==NULL) die("getcwd error: %m"); if(chdir(params->shared_folder)) die("failed to chdir to shared folder: %m") - int out_fd=open("out",O_WRONLY|O_CREAT,0666); - if(out_fd==-1) die("unable to open output file:%m") - else dup2(out_fd,STDOUT_FILENO); - int in_fd=open("in",O_RDONLY|O_CREAT,0666); - if(in_fd==-1) die("unable to open input file:%m") - else dup2(in_fd,STDIN_FILENO); - int err_fd=open("err",O_WRONLY|O_CREAT,0666); - if(err_fd==-1) die("unable to open error file:%m") - else dup2(err_fd,STDERR_FILENO); + int out_fd = open("out", O_WRONLY | O_CREAT, 0666); + if(out_fd == -1) die("unable to open output file:%m") + else dup2(out_fd, STDOUT_FILENO); + int in_fd = open("in", O_RDONLY | O_CREAT, 0666); + if(in_fd == -1) die("unable to open input file:%m") + else dup2(in_fd, STDIN_FILENO); + int err_fd = open("err", O_WRONLY | O_CREAT, 0666); + if(err_fd == -1) die("unable to open error file:%m") + else dup2(err_fd, STDERR_FILENO); if(chdir(cwd)) die("failed to chdir: %m"); - mnt_prepare("minrootfs",params->shared_folder); - sethostname(hostname,sizeof(hostname)); + mnt_prepare("minrootfs", params->shared_folder); + sethostname(hostname, sizeof(hostname)); ro_fs(params->shared_folder); if(setgid(1000)) die("failed to setgid:%m"); if(setuid(1000)) die("failed to setuid:%m"); @@ -75,6 +73,6 @@ static int nsrun(void* arg) { "PWD=/", NULL, }; - if (execve(cmd,argv,env) == -1) die("failed to exec,%m"); - return 1; + if (execve(cmd, argv, env) == -1) die("failed to exec,%m"); + return 1;// removes warning } diff --git a/starter/starter.c b/starter/starter.c index d1ece92..6b022b7 100644 --- a/starter/starter.c +++ b/starter/starter.c @@ -39,19 +39,18 @@ struct killparams{ #include "ns_exec.c" #include "cgroup_prepare.c" -//bool TL_achieve=false; uint64_t time_start; -//get time in milliseconds +// get time in milliseconds uint64_t getmstime() { struct timeval tm; - gettimeofday(&tm,NULL); - return (uint64_t)tm.tv_sec*1000+(uint64_t)tm.tv_usec/1000; + gettimeofday(&tm, NULL); + return (uint64_t) tm.tv_sec * 1000 + (uint64_t) tm.tv_usec / 1000; } -//time limit realisation +// time limit realisation static int killafter(void *arg) { - //die when parent dies + // die when parent dies if (prctl(PR_SET_PDEATHSIG, SIGKILL)) die("cannot PR_SET_PDEATHSIG for child process: %m\n"); struct killparams* params = (struct killparams*) arg; struct timespec tw = {params -> time / 1000, ((params->time) % 1000+5) * 1000000}; @@ -65,7 +64,7 @@ static int killafter(void *arg) { static char nmstack[STACK_SIZE]; static char killstack[STACK_SIZE]; -static void parse_args(int argc, char **argv, struct params *params,struct limits *limits){ +static void parse_args(int argc, char **argv, struct params *params, struct limits *limits){ if (argc < 7) { puts("usage:\n starter