diff --git a/src/common/slurm_step_layout.c b/src/common/slurm_step_layout.c
index ef0579b894c4ec6e29544321dd7c6bf9077fe48f..2245f813da62d33e6d892111a3a0c1762a335239 100644
--- a/src/common/slurm_step_layout.c
+++ b/src/common/slurm_step_layout.c
@@ -132,6 +132,7 @@ slurm_step_layout_t *slurm_step_layout_create(
 		slurm_step_layout_destroy(step_layout);
 		step_layout = NULL;
 	}
+	xfree(arbitrary_nodes);
 	return step_layout;
 }
 
diff --git a/src/slurmctld/job_mgr.c b/src/slurmctld/job_mgr.c
index 815b9434baf033b70a58bd9f305965bb53ca7d62..468cd0b88fe21e0c11b4c5d40e8d7a2fa4ccc2e9 100644
--- a/src/slurmctld/job_mgr.c
+++ b/src/slurmctld/job_mgr.c
@@ -1051,6 +1051,7 @@ static void _excise_node_from_job(struct job_record *job_ptr,
 				  struct node_record *node_ptr)
 {
 	make_node_idle(node_ptr, job_ptr); /* updates bitmap */
+	xfree(job_ptr->nodes);
 	job_ptr->nodes = bitmap2node_name(job_ptr->node_bitmap);
 	xfree(job_ptr->cpus_per_node);
 	xfree(job_ptr->cpu_count_reps);
diff --git a/src/slurmctld/node_scheduler.c b/src/slurmctld/node_scheduler.c
index 28972b6de66f407d9c6b87a8e582ff416eac22d0..23742f456ce0db316036fabc17b5df8cbb886b98 100644
--- a/src/slurmctld/node_scheduler.c
+++ b/src/slurmctld/node_scheduler.c
@@ -638,6 +638,7 @@ _pick_best_nodes(struct node_set *node_set_ptr, int node_set_size,
 						FREE_NULL_BITMAP(
 							partially_idle_node_bitmap);
 					}
+					FREE_NULL_BITMAP(avail_bitmap);
 					FREE_NULL_BITMAP(total_bitmap);
 					FREE_NULL_BITMAP(possible_bitmap);
 					return error_code;
diff --git a/src/slurmctld/step_mgr.c b/src/slurmctld/step_mgr.c
index 154b6e14f187ba2787b4fca9061cdc3240fe8371..96eceedf6993cbd730cb9095eedafaa2d585a0a6 100644
--- a/src/slurmctld/step_mgr.c
+++ b/src/slurmctld/step_mgr.c
@@ -730,6 +730,7 @@ step_create(job_step_create_request_msg_t *step_specs,
 		step_specs->node_list = bitmap2node_name(nodeset);
 	} else {
 		step_node_list = bitmap2node_name(nodeset);
+		xfree(step_specs->node_list);
 		step_specs->node_list = xstrdup(step_node_list);
 	}