Skip to content

Commit

Permalink
mxqd: Simplify exec_reaper()
Browse files Browse the repository at this point in the history
  • Loading branch information
donald committed Apr 20, 2022
1 parent a475703 commit 23cfdfd
Showing 1 changed file with 25 additions and 59 deletions.
84 changes: 25 additions & 59 deletions mxqd.c
Original file line number Diff line number Diff line change
Expand Up @@ -920,38 +920,25 @@ static int is_reaper(pid_t pid) {
}

static void exec_reaper(struct mxq_server *server,struct mxq_group_list *glist, struct mxq_job *job) {
int res;

struct mxq_group *group;
struct mxq_group *group = &glist->group;

group = &glist->group;

res = prctl(PR_SET_NAME, REAPER_PNAME, NULL, NULL, NULL);
if (res < 0) {
if (prctl(PR_SET_NAME, REAPER_PNAME, NULL, NULL, NULL) ==-1) {
mx_log_err("reaper_process set name: %m");
return;
}

res = setsid();
if (res < 0) {
if (setsid() == -1) {
mx_log_err("reaper_process setsid: %m");
return;
}

res = prctl(PR_SET_CHILD_SUBREAPER, 1);
if (res < 0) {
if (prctl(PR_SET_CHILD_SUBREAPER, 1) == -1) {
mx_log_err("set subreaper: %m");
return;
}

struct passwd *passwd;
int fh;
struct rlimit rlim;

sigprocmask(SIG_UNBLOCK,&all_signals,NULL);
signal(SIGPIPE,SIG_DFL);

passwd = getpwuid(group->user_uid);
struct passwd *passwd = getpwuid(group->user_uid);
if (!passwd) {
mx_log_err("job=%s(%d):%lu:%lu getpwuid(): %m",
group->user_name, group->user_uid, group->group_id, job->job_id);
Expand Down Expand Up @@ -988,10 +975,7 @@ static void exec_reaper(struct mxq_server *server,struct mxq_group_list *glist,
}
}

/* prepare environment */

res = clearenv();
if (res != 0) {
if (clearenv() != 0) {
mx_log_err("job=%s(%d):%lu:%lu clearenv(): %m",
group->user_name, group->user_uid, group->group_id, job->job_id);
return;
Expand All @@ -1017,8 +1001,7 @@ static void exec_reaper(struct mxq_server *server,struct mxq_group_list *glist,
if (group->job_tmpdir_size == 0) {
mx_setenv_forever("TMPDIR", server->initial_tmpdir);
} else {
char *mxq_job_tmpdir;
mxq_job_tmpdir = mx_asprintf_forever("%s/%lu", MXQ_JOB_TMPDIR_MNTDIR, job->job_id);
char *mxq_job_tmpdir = mx_asprintf_forever("%s/%lu", MXQ_JOB_TMPDIR_MNTDIR, job->job_id);
mx_setenv_forever("MXQ_JOB_TMPDIR", mxq_job_tmpdir);
mx_setenv_forever("TMPDIR", mxq_job_tmpdir);
free(mxq_job_tmpdir);
Expand All @@ -1042,7 +1025,7 @@ static void exec_reaper(struct mxq_server *server,struct mxq_group_list *glist,
free(argv[3]);
}

fh = open("/proc/self/loginuid", O_WRONLY|O_TRUNC);
int fh = open("/proc/self/loginuid", O_WRONLY|O_TRUNC);
if (fh == -1) {
mx_log_err("job=%s(%d):%lu:%lu open(%s) failed: %m",
group->user_name, group->user_uid, group->group_id, job->job_id, "/proc/self/loginuid");
Expand All @@ -1051,21 +1034,16 @@ static void exec_reaper(struct mxq_server *server,struct mxq_group_list *glist,
dprintf(fh, "%d", group->user_uid);
close(fh);

/* set memory limits */
struct rlimit rlim;
rlim.rlim_cur = group->job_memory*1024*1024;
rlim.rlim_max = group->job_memory*1024*1024;

res = setrlimit(RLIMIT_DATA, &rlim);
if (res == -1)
if (setrlimit(RLIMIT_DATA, &rlim) == -1)
mx_log_err("job=%s(%d):%lu:%lu setrlimit(RLIMIT_DATA, ...) failed: %m",
group->user_name, group->user_uid, group->group_id, job->job_id);

/* disable core files */
rlim.rlim_cur = 0;
rlim.rlim_cur = 0;

res = setrlimit(RLIMIT_CORE, &rlim);
if (res == -1)
if (setrlimit(RLIMIT_CORE, &rlim) == -1)
mx_log_err("job=%s(%d):%lu:%lu setrlimit(RLIMIT_CORE, ...) failed: %m",
group->user_name, group->user_uid, group->group_id, job->job_id);

Expand All @@ -1075,37 +1053,30 @@ static void exec_reaper(struct mxq_server *server,struct mxq_group_list *glist,
rlim.rlim_cur = group->job_time*60;
rlim.rlim_cur = group->job_time*63;

res = setrlimit(RLIMIT_CPU, &rlim);
if (res == -1)
if (setrlimit(RLIMIT_CPU, &rlim) == -1)
mx_log_err("job=%s(%d):%lu:%lu setrlimit(RLIMIT_CPU, ...) failed: %m",
group->user_name, group->user_uid, group->group_id, job->job_id);
}

res = initgroups(passwd->pw_name, group->user_gid);
if (res == -1) {
if (initgroups(passwd->pw_name, group->user_gid) == -1) {
mx_log_err("job=%s(%d):%lu:%lu initgroups() failed: %m",
group->user_name, group->user_uid, group->group_id, job->job_id);
return;
}

res = setregid(group->user_gid, group->user_gid);
if (res == -1) {
if (setregid(group->user_gid, group->user_gid) == -1) {
mx_log_err("job=%s(%d):%lu:%lu setregid(%d, %d) failed: %m",
group->user_name, group->user_uid, group->group_id, job->job_id,
group->user_gid, group->user_gid);
return;
}

res = setreuid(-1, group->user_uid);
if (res == -1) {
if (setreuid(-1, group->user_uid) == -1) {
mx_log_err("job=%s(%d):%lu:%lu setreuid(%d, %d) failed: %m",
group->user_name, group->user_uid, group->group_id, job->job_id,
group->user_uid, group->user_uid);
return;
}

res = chdir(job->job_workdir);
if (res == -1) {
if (chdir(job->job_workdir) == -1) {
mx_log_err("job=%s(%d):%lu:%lu chdir(%s) failed: %m",
group->user_name, group->user_uid, group->group_id, job->job_id,
job->job_workdir);
Expand All @@ -1114,30 +1085,26 @@ static void exec_reaper(struct mxq_server *server,struct mxq_group_list *glist,

umask(job->job_umask);

res=sched_setaffinity(0,sizeof(job->host_cpu_set),&job->host_cpu_set);
if (res<0) mx_log_warning("sched_setaffinity: $m");
if (sched_setaffinity(0,sizeof(job->host_cpu_set),&job->host_cpu_set) == -1)
mx_log_warning("sched_setaffinity: $m");

mxq_job_set_tmpfilenames(group, job);

res = mxq_redirect_input("/dev/null");
if (res < 0) {
mx_log_err(" job=%s(%d):%lu:%lu mxq_redirect_input() failed (%d): %m",
if (mxq_redirect_input("/dev/null") < 0) {
mx_log_err(" job=%s(%d):%lu:%lu mxq_redirect_input() failed: %m",
group->user_name,
group->user_uid,
group->group_id,
job->job_id,
res);
job->job_id);
return;
}

res = mxq_redirect_output(job->tmp_stdout, job->tmp_stderr);
if (res < 0) {
mx_log_err(" job=%s(%d):%lu:%lu mxq_redirect_output() failed (%d): %m",
if (mxq_redirect_output(job->tmp_stdout, job->tmp_stderr) < 0) {
mx_log_err(" job=%s(%d):%lu:%lu mxq_redirect_output() failed: %m",
group->user_name,
group->user_uid,
group->group_id,
job->job_id,
res);
job->job_id);
return;
}

Expand Down Expand Up @@ -1165,8 +1132,7 @@ static void exec_reaper(struct mxq_server *server,struct mxq_group_list *glist,
new_argv[i+4] = argv[i];
new_argv[argc+4] = NULL;

res = setuid(0);
if (res == -1) {
if (setuid(0) == -1) {
mx_log_err("job=%s(%d):%lu:%lu setuid(0) failed: %m",
group->user_name,
group->user_uid,
Expand Down

0 comments on commit 23cfdfd

Please sign in to comment.