From 2becde33d928ffc7d0c3908e98d07b120fe31ff9 Mon Sep 17 00:00:00 2001
From: Morris Jette <jette@schedmd.com>
Date: Thu, 11 Aug 2011 16:20:13 -0700
Subject: [PATCH] Improve step record layout management

This prevents bad node index values in a job step completion record
from crashing slurmctld, as is possible if srun has bad configuration
information about a job step or other failure.
---
 src/slurmctld/step_mgr.c | 22 ++++++++--------------
 1 file changed, 8 insertions(+), 14 deletions(-)

diff --git a/src/slurmctld/step_mgr.c b/src/slurmctld/step_mgr.c
index 876cffc527c..038ececfd12 100644
--- a/src/slurmctld/step_mgr.c
+++ b/src/slurmctld/step_mgr.c
@@ -2663,13 +2663,6 @@ extern int step_partial_comp(step_complete_msg_t *req, uid_t uid,
 		*/
 		req->range_last = nodes - 1;
 #endif
-		if (req->range_last >= nodes) {	/* range is zero origin */
-			error("step_partial_comp: StepID=%u.%u last=%u "
-			      "nodes=%d",
-			      req->job_id, req->job_step_id, req->range_last,
-			      nodes);
-			return EINVAL;
-		}
 		step_ptr->exit_node_bitmap = bit_alloc(nodes);
 		if (step_ptr->exit_node_bitmap == NULL)
 			fatal("bit_alloc: %m");
@@ -2682,15 +2675,16 @@ extern int step_partial_comp(step_complete_msg_t *req, uid_t uid,
 		*/
 		req->range_last = nodes - 1;
 #endif
-		if (req->range_last >= nodes) {	/* range is zero origin */
-			error("step_partial_comp: StepID=%u.%u last=%u "
-			      "nodes=%d",
-			      req->job_id, req->job_step_id, req->range_last,
-			      nodes);
-			return EINVAL;
-		}
 		step_ptr->exit_code = MAX(step_ptr->exit_code, req->step_rc);
 	}
+	if ((req->range_first >= nodes) || (req->range_last >= nodes) ||
+	    (req->range_first > req->range_last)) {
+		/* range is zero origin */
+		error("step_partial_comp: StepID=%u.%u range=%u-%u nodes=%d",
+		      req->job_id, req->job_step_id, req->range_first,
+		      req->range_last, nodes);
+		return EINVAL;
+	}
 
 	bit_nset(step_ptr->exit_node_bitmap,
 		 req->range_first, req->range_last);
-- 
GitLab