diff --git a/src/common/gres.c b/src/common/gres.c
index 95bf2607c8d65073ea1bf33885bfc707dae9e3dd..9428287b6750784b698a385061dd6e1b89037fbe 100644
--- a/src/common/gres.c
+++ b/src/common/gres.c
@@ -1111,9 +1111,11 @@ static void _gres_node_list_delete(void *list_element)
 	gres_ptr = (gres_state_t *) list_element;
 	gres_node_ptr = (gres_node_state_t *) gres_ptr->gres_data;
 	FREE_NULL_BITMAP(gres_node_ptr->gres_bit_alloc);
-	for (i=0; i<gres_node_ptr->topo_cnt; i++) {
-		FREE_NULL_BITMAP(gres_node_ptr->topo_cpus_bitmap[i]);
-		FREE_NULL_BITMAP(gres_node_ptr->topo_gres_bitmap[i]);
+	for (i = 0; i < gres_node_ptr->topo_cnt; i++) {
+		if (gres_node_ptr->topo_cpus_bitmap)
+			FREE_NULL_BITMAP(gres_node_ptr->topo_cpus_bitmap[i]);
+		if (gres_node_ptr->topo_gres_bitmap)
+			FREE_NULL_BITMAP(gres_node_ptr->topo_gres_bitmap[i]);
 	}
 	xfree(gres_node_ptr->topo_cpus_bitmap);
 	xfree(gres_node_ptr->topo_gres_bitmap);
@@ -1406,9 +1408,15 @@ extern int _node_config_validate(char *node_name, char *orig_config,
 		/* Need to clear topology info */
 		xfree(gres_data->topo_gres_cnt_alloc);
 		xfree(gres_data->topo_gres_cnt_avail);
-		for (i=0; i<gres_data->topo_cnt; i++) {
-			FREE_NULL_BITMAP(gres_data->topo_gres_bitmap[i]);
-			FREE_NULL_BITMAP(gres_data->topo_cpus_bitmap[i]);
+		for (i = 0; i < gres_data->topo_cnt; i++) {
+			if (gres_data->topo_gres_bitmap) {
+				FREE_NULL_BITMAP(gres_data->
+						 topo_gres_bitmap[i]);
+			}
+			if (gres_data->topo_cpus_bitmap) {
+				FREE_NULL_BITMAP(gres_data->
+						 topo_cpus_bitmap[i]);
+			}
 		}
 		xfree(gres_data->topo_gres_bitmap);
 		xfree(gres_data->topo_cpus_bitmap);
@@ -1423,13 +1431,21 @@ extern int _node_config_validate(char *node_name, char *orig_config,
 		gres_data->topo_gres_cnt_avail =
 			xrealloc(gres_data->topo_gres_cnt_avail,
 				 set_cnt * sizeof(uint32_t));
-		for (i = 0; i < gres_data->topo_cnt; i++)
-			FREE_NULL_BITMAP(gres_data->topo_gres_bitmap[i]);
+		if (gres_data->topo_gres_bitmap) {
+			for (i = 0; i < gres_data->topo_cnt; i++) {
+				FREE_NULL_BITMAP(gres_data->
+						 topo_gres_bitmap[i]);
+			}
+		}
 		gres_data->topo_gres_bitmap =
 			xrealloc(gres_data->topo_gres_bitmap,
 				 set_cnt * sizeof(bitstr_t *));
-		for (i = 0; i < gres_data->topo_cnt; i++)
-			FREE_NULL_BITMAP(gres_data->topo_cpus_bitmap[i]);
+		if (gres_data->topo_cpus_bitmap) {
+			for (i = 0; i < gres_data->topo_cnt; i++) {
+				FREE_NULL_BITMAP(gres_data->
+						 topo_cpus_bitmap[i]);
+			}
+		}
 		gres_data->topo_cpus_bitmap =
 			xrealloc(gres_data->topo_cpus_bitmap,
 				 set_cnt * sizeof(bitstr_t *));
@@ -1511,9 +1527,15 @@ extern int _node_config_validate(char *node_name, char *orig_config,
 		      context_ptr->gres_type, node_name,
 		      gres_data->gres_cnt_config, gres_data->gres_cnt_found);
 		if (gres_data->topo_cpus_bitmap) {
-			for (i=0; i<gres_data->topo_cnt; i++) {
-				FREE_NULL_BITMAP(gres_data->topo_cpus_bitmap[i]);
-				FREE_NULL_BITMAP(gres_data->topo_gres_bitmap[i]);
+			for (i = 0; i < gres_data->topo_cnt; i++) {
+				if (gres_data->topo_cpus_bitmap) {
+					FREE_NULL_BITMAP(gres_data->
+							 topo_cpus_bitmap[i]);
+				}
+				if (gres_data->topo_gres_bitmap) {
+					FREE_NULL_BITMAP(gres_data->
+							 topo_gres_bitmap[i]);
+				}
 			}
 			xfree(gres_data->topo_cpus_bitmap);
 			xfree(gres_data->topo_gres_bitmap);
@@ -2053,7 +2075,7 @@ static void _job_state_delete(void *gres_data)
 	if (gres_ptr == NULL)
 		return;
 
-	for (i=0; i<gres_ptr->node_cnt; i++) {
+	for (i = 0; i < gres_ptr->node_cnt; i++) {
 		if (gres_ptr->gres_bit_alloc)
 			FREE_NULL_BITMAP(gres_ptr->gres_bit_alloc[i]);
 		if (gres_ptr->gres_bit_step_alloc)
@@ -2526,13 +2548,18 @@ static void _validate_gres_node_cpus(gres_node_state_t *node_gres_ptr,
 
 	if (node_gres_ptr->topo_cnt == 0)
 		return;
+	if (node_gres_ptr->topo_cpus_bitmap == NULL) {
+		error("Gres topo_cpus_bitmap is NULL on node %s", node_name);
+		return;
+	}
+
 	cpus_slurmd = bit_size(node_gres_ptr->topo_cpus_bitmap[0]);
 	if (cpus_slurmd == cpus_ctld)
 		return;
 
 	debug("Gres CPU count mismatch on node %s (%d != %d)",
 	      node_name, cpus_slurmd, cpus_ctld);
-	for (i=0; i<node_gres_ptr->topo_cnt; i++) {
+	for (i = 0; i < node_gres_ptr->topo_cnt; i++) {
 		if (i != 0) {
 			cpus_slurmd = bit_size(node_gres_ptr->
 					       topo_cpus_bitmap[i]);
@@ -3755,7 +3782,7 @@ static void _step_state_delete(void *gres_data)
 
 	FREE_NULL_BITMAP(gres_ptr->node_in_use);
 	if (gres_ptr->gres_bit_alloc) {
-		for (i=0; i<gres_ptr->node_cnt; i++)
+		for (i = 0; i < gres_ptr->node_cnt; i++)
 			FREE_NULL_BITMAP(gres_ptr->gres_bit_alloc[i]);
 		xfree(gres_ptr->gres_bit_alloc);
 	}