Fix race condition in job dependency logic If job involved in dependency completes and is purged the logic used to test for circular dependencies can use the invalid pointer and generate an invalid memory reference before the pointer is cleared from the dependency list data structure.
diff --git a/NEWS b/NEWS index 058b739..3671b13 100644 --- a/NEWS +++ b/NEWS
@@ -12,6 +12,8 @@ a reconfiguration, the node's bitmap was not cleared resulting in an underflow upon job termination or removal from scheduling matrix by the backfill scheduler. + -- Fix race condition in job dependency logic which can result in invalid + memory reference. * Changes in SLURM 2.3.5 ========================
diff --git a/src/slurmctld/job_scheduler.c b/src/slurmctld/job_scheduler.c index 481c451..f485891 100644 --- a/src/slurmctld/job_scheduler.c +++ b/src/slurmctld/job_scheduler.c
@@ -1225,6 +1225,9 @@ continue; if (dep_ptr->job_id == job_id) rc = true; + else if ((dep_ptr->job_id != dep_ptr->job_ptr->job_id) || + (dep_ptr->job_ptr->magic != JOB_MAGIC)) + continue; /* purged job, ptr not yet cleared */ else if (dep_ptr->job_ptr->details && dep_ptr->job_ptr->details->depend_list) { rc = _scan_depend(dep_ptr->job_ptr->details->