diff --git a/NEWS b/NEWS
index db13f53f7bb13981af118a3091dd8773e2eb566f..ec3d030c0e410808674c5126e7eca1511c22e95d 100644
--- a/NEWS
+++ b/NEWS
@@ -307,6 +307,8 @@ documents those changes that are of interest to users and administrators.
     reason to 32 chars.
  -- Fix potential packing error when packing a NULL slurmdb_clus_res_rec_t.
  -- Fix potential packing errors when packing a NULL slurmdb_reservation_cond_t.
+ -- Burst_buffer/cray - Prevent slurmctld daemon abort if "paths" operation
+    fails. Now job will be held.
 
 * Changes in Slurm 16.05.9
 ==========================
diff --git a/src/plugins/burst_buffer/cray/burst_buffer_cray.c b/src/plugins/burst_buffer/cray/burst_buffer_cray.c
index e7b04e00a1228483cbab738115b6159d19a05359..e5e8a61c4f8f2eee6978445c38081b02a445f420 100644
--- a/src/plugins/burst_buffer/cray/burst_buffer_cray.c
+++ b/src/plugins/burst_buffer/cray/burst_buffer_cray.c
@@ -3686,6 +3686,7 @@ extern int bb_p_job_begin(struct job_record *job_ptr)
 		    bb_state.bb_config.debug_flag)
 			info("%s: paths ran for %s", __func__, TIME_STR);
 		_log_script_argv(script_argv, resp_msg);
+		_free_script_argv(script_argv);
 #if 1
 		//FIXME: Cray API returning "job_file_valid True" but exit 1 in some cases
 		if ((!WIFEXITED(status) || (WEXITSTATUS(status) != 0)) &&
@@ -3695,12 +3696,13 @@ extern int bb_p_job_begin(struct job_record *job_ptr)
 #endif
 			error("%s: paths for job %u status:%u response:%s",
 			      __func__, job_ptr->job_id, status, resp_msg);
+			xfree(resp_msg);
 			rc = ESLURM_INVALID_BURST_BUFFER_REQUEST;
+			goto fini;
 		} else {
 			_update_job_env(job_ptr, path_file);
+			xfree(resp_msg);
 		}
-		xfree(resp_msg);
-		_free_script_argv(script_argv);
 
 		/* Setup "pre_run" operation */
 		pre_run_argv = xmalloc(sizeof(char *) * 10);
@@ -3743,8 +3745,9 @@ extern int bb_p_job_begin(struct job_record *job_ptr)
 			usleep(100000);
 		}
 		slurm_attr_destroy(&pre_run_attr);
-}
+	}
 
+fini:
 	xfree(client_nodes_file_nid);
 	xfree(job_dir);
 	return rc;