mboxd_flash: Fix infinite loop on EOF

Change-Id: If3684d8c386dd41ce7f7a40353e55267e13d5b07
Signed-off-by: Andrew Jeffery <andrew@aj.id.au>
diff --git a/mboxd_flash.c b/mboxd_flash.c
index 606f63d..e8b147d 100644
--- a/mboxd_flash.c
+++ b/mboxd_flash.c
@@ -108,6 +108,8 @@
 int copy_flash(struct mbox_context *context, uint32_t offset, void *mem,
 	       uint32_t size)
 {
+	int32_t size_read;
+
 	MSG_OUT("Loading flash at %p for 0x%08x bytes from offset 0x%.8x\n",
 							mem, size, offset);
 	if (lseek(context->fds[MTD_FD].fd, offset, SEEK_SET) != offset) {
@@ -116,8 +118,8 @@
 		return -MBOX_R_SYSTEM_ERROR;
 	}
 
-	while (size) {
-		uint32_t size_read = read(context->fds[MTD_FD].fd, mem,
+	do {
+		size_read = read(context->fds[MTD_FD].fd, mem,
 					  min_u32(CHUNKSIZE, size));
 		if (size_read < 0) {
 			MSG_ERR("Couldn't copy mtd into ram: %d. %s\n",
@@ -127,9 +129,9 @@
 
 		size -= size_read;
 		mem += size_read;
-	}
+	} while (size && size_read);
 
-	return 0;
+	return size ? -MBOX_R_SYSTEM_ERROR : 0;
 }
 
 /*