diff --git a/src/flash/nand/tcl.c b/src/flash/nand/tcl.c
index cbdeda5bcea90ec070ef1edb0fdd149f25e91146..d9738c55b272e9e7959edf3d146c701fb4fe14f4 100644
--- a/src/flash/nand/tcl.c
+++ b/src/flash/nand/tcl.c
@@ -254,7 +254,8 @@ COMMAND_HANDLER(handle_nand_write_command)
 		int bytes_read = nand_fileio_read(nand, &s);
 		if (bytes_read <= 0) {
 			command_print(CMD_CTX, "error while reading file");
-			return nand_fileio_cleanup(&s);
+			nand_fileio_cleanup(&s);
+			return ERROR_FAIL;
 		}
 		s.size -= bytes_read;
 
@@ -264,7 +265,8 @@ COMMAND_HANDLER(handle_nand_write_command)
 			command_print(CMD_CTX, "failed writing file %s "
 				"to NAND flash %s at offset 0x%8.8" PRIx32,
 				CMD_ARGV[1], CMD_ARGV[0], s.address);
-			return nand_fileio_cleanup(&s);
+			nand_fileio_cleanup(&s);
+			return retval;
 		}
 		s.address += s.page_size;
 	}
diff --git a/src/flash/nor/tcl.c b/src/flash/nor/tcl.c
index d62fa7462e43bd9b70914754ae498a4d3c6a9cbf..69368229d223a25795be681ec8369ce752f6cdf5 100644
--- a/src/flash/nor/tcl.c
+++ b/src/flash/nor/tcl.c
@@ -341,7 +341,7 @@ COMMAND_HANDLER(handle_flash_erase_command)
 			"in %fs", first, last, p->bank_number, duration_elapsed(&bench));
 	}
 
-	return ERROR_OK;
+	return retval;
 }
 
 COMMAND_HANDLER(handle_flash_protect_command)
@@ -600,7 +600,7 @@ COMMAND_HANDLER(handle_flash_write_bank_command)
 	COMMAND_PARSE_NUMBER(u32, CMD_ARGV[2], offset);
 
 	if (fileio_open(&fileio, CMD_ARGV[1], FILEIO_READ, FILEIO_BINARY) != ERROR_OK)
-		return ERROR_OK;
+		return ERROR_FAIL;
 
 	size_t filesize;
 	retval = fileio_size(fileio, &filesize);
@@ -619,7 +619,7 @@ COMMAND_HANDLER(handle_flash_write_bank_command)
 	if (fileio_read(fileio, filesize, buffer, &buf_cnt) != ERROR_OK) {
 		free(buffer);
 		fileio_close(fileio);
-		return ERROR_OK;
+		return ERROR_FAIL;
 	}
 
 	retval = flash_driver_write(p, buffer, offset, buf_cnt);
diff --git a/src/target/target.c b/src/target/target.c
index 9fc9d20fcf5b8921e3526d6ec2b0458c56dff43f..c23590e5989c50977ce99b5a448e567f7784223b 100644
--- a/src/target/target.c
+++ b/src/target/target.c
@@ -3166,7 +3166,7 @@ COMMAND_HANDLER(handle_load_image_command)
 	duration_start(&bench);
 
 	if (image_open(&image, CMD_ARGV[0], (CMD_ARGC >= 3) ? CMD_ARGV[2] : NULL) != ERROR_OK)
-		return ERROR_OK;
+		return ERROR_FAIL;
 
 	image_size = 0x0;
 	retval = ERROR_OK;
@@ -3176,6 +3176,7 @@ COMMAND_HANDLER(handle_load_image_command)
 			command_print(CMD_CTX,
 						  "error allocating buffer for section (%d bytes)",
 						  (int)(image.sections[i].size));
+			retval = ERROR_FAIL;
 			break;
 		}