From d08f0fe85c414b66ed44eaf0a9427d564f7be457 Mon Sep 17 00:00:00 2001 From: Morris Jette <jette@schedmd.com> Date: Mon, 22 Jul 2013 16:14:15 -0700 Subject: [PATCH] Correct job container ownership in a couple of places The container owner should have been SlurmdUser rather than job owner for Prolog, Epilog and UnkillableProgram parameters --- src/slurmd/common/run_script.c | 2 +- src/slurmd/slurmd/req.c | 2 +- src/slurmd/slurmstepd/mgr.c | 2 +- src/slurmd/slurmstepd/req.c | 2 +- src/slurmd/slurmstepd/step_terminate_monitor.c | 7 ++----- src/slurmd/slurmstepd/step_terminate_monitor.h | 2 +- 6 files changed, 7 insertions(+), 10 deletions(-) diff --git a/src/slurmd/common/run_script.c b/src/slurmd/common/run_script.c index 5db528ebf10..08010f51f75 100644 --- a/src/slurmd/common/run_script.c +++ b/src/slurmd/common/run_script.c @@ -157,7 +157,7 @@ _run_one_script(const char *name, const char *path, uint32_t job_id, exit(127); } - if (container_g_add_pid(job_id, cpid, uid) != SLURM_SUCCESS) + if (container_g_add_pid(job_id, cpid, getuid()) != SLURM_SUCCESS) error("container_g_add_pid(%u): %m", job_id); if (waitpid_timeout(name, cpid, &status, max_wait) < 0) diff --git a/src/slurmd/slurmd/req.c b/src/slurmd/slurmd/req.c index 2cd5ae17548..ff34b797342 100644 --- a/src/slurmd/slurmd/req.c +++ b/src/slurmd/slurmd/req.c @@ -4300,7 +4300,7 @@ _run_spank_job_script (const char *mode, char **env, uint32_t job_id, uid_t uid) exit (127); } - if (container_g_add_pid(job_id, cpid, uid) != SLURM_SUCCESS) + if (container_g_add_pid(job_id, cpid, getuid()) != SLURM_SUCCESS) error("container_g_add_pid(%u): %m", job_id); close (pfds[0]); diff --git a/src/slurmd/slurmstepd/mgr.c b/src/slurmd/slurmstepd/mgr.c index 4e43e440ca3..f0de161542d 100644 --- a/src/slurmd/slurmstepd/mgr.c +++ b/src/slurmd/slurmstepd/mgr.c @@ -1052,7 +1052,7 @@ fail2: * terminated before the switch window can be released by * interconnect_postfini(). */ - step_terminate_monitor_start(job->jobid, job->stepid, job->uid); + step_terminate_monitor_start(job->jobid, job->stepid); if (job->cont_id != 0) { slurm_container_signal(job->cont_id, SIGKILL); slurm_container_wait(job->cont_id); diff --git a/src/slurmd/slurmstepd/req.c b/src/slurmd/slurmstepd/req.c index 926df60d770..4fb25d373dc 100644 --- a/src/slurmd/slurmstepd/req.c +++ b/src/slurmd/slurmstepd/req.c @@ -903,7 +903,7 @@ _handle_terminate(int fd, stepd_step_rec_t *job, uid_t uid) debug("_handle_terminate for step=%u.%u uid=%d", job->jobid, job->stepid, uid); - step_terminate_monitor_start(job->jobid, job->stepid, job->uid); + step_terminate_monitor_start(job->jobid, job->stepid); if (uid != job->uid && !_slurm_authorized_user(uid)) { debug("terminate req from uid %ld for job %u.%u " diff --git a/src/slurmd/slurmstepd/step_terminate_monitor.c b/src/slurmd/slurmstepd/step_terminate_monitor.c index 2c5bf5f2012..2a8da719757 100644 --- a/src/slurmd/slurmstepd/step_terminate_monitor.c +++ b/src/slurmd/slurmstepd/step_terminate_monitor.c @@ -58,12 +58,11 @@ static uint16_t timeout; static char *program_name; static uint32_t recorded_jobid = NO_VAL; static uint32_t recorded_stepid = NO_VAL; -static uid_t recorded_uid = 0; static void *_monitor(void *); static int _call_external_program(void); -void step_terminate_monitor_start(uint32_t jobid, uint32_t stepid, uid_t uid) +void step_terminate_monitor_start(uint32_t jobid, uint32_t stepid) { slurm_ctl_conf_t *conf; pthread_attr_t attr; @@ -92,7 +91,6 @@ void step_terminate_monitor_start(uint32_t jobid, uint32_t stepid, uid_t uid) running_flag = 1; recorded_jobid = jobid; recorded_stepid = stepid; - recorded_uid = uid; pthread_mutex_unlock(&lock); @@ -203,8 +201,7 @@ static int _call_external_program(void) exit(127); } - if (container_g_add_pid(recorded_jobid, cpid, recorded_uid) != - SLURM_SUCCESS) + if (container_g_add_pid(recorded_jobid,cpid,getuid()) != SLURM_SUCCESS) error("container_g_add_pid(%u): %m", recorded_jobid); opt = WNOHANG; diff --git a/src/slurmd/slurmstepd/step_terminate_monitor.h b/src/slurmd/slurmstepd/step_terminate_monitor.h index 984481e21a0..e9c016a67b1 100644 --- a/src/slurmd/slurmstepd/step_terminate_monitor.h +++ b/src/slurmd/slurmstepd/step_terminate_monitor.h @@ -45,7 +45,7 @@ * If step_terminate_monitor_stop() is called before the time runs * out, the external program will not be called. */ -void step_terminate_monitor_start(uint32_t jobid, uint32_t stepid, uid_t uid); +void step_terminate_monitor_start(uint32_t jobid, uint32_t stepid); /* * Stop the timer in the step terminate monitor pthread, and kill -- GitLab