summaryrefslogtreecommitdiffstats
path: root/mboxd_flash.c
diff options
context:
space:
mode:
authorAndrew Jeffery <andrew@aj.id.au>2017-04-12 00:16:56 +0930
committerAndrew Jeffery <andrew@aj.id.au>2017-04-26 11:34:00 +0930
commit9aa5ff70dc515529675f432647fbbc39f7ee32fd (patch)
treeb0d3a7ab737ca22815515ea3794107ba0ca71698 /mboxd_flash.c
parentf1982e416f0476663442a07ab1a3979000b7980d (diff)
downloadphosphor-mboxd-9aa5ff70dc515529675f432647fbbc39f7ee32fd.tar.gz
phosphor-mboxd-9aa5ff70dc515529675f432647fbbc39f7ee32fd.zip
mboxd_flash: Fix infinite loop on EOF
Change-Id: If3684d8c386dd41ce7f7a40353e55267e13d5b07 Signed-off-by: Andrew Jeffery <andrew@aj.id.au>
Diffstat (limited to 'mboxd_flash.c')
-rw-r--r--mboxd_flash.c10
1 files changed, 6 insertions, 4 deletions
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 @@ void free_flash_dev(struct mbox_context *context)
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 @@ int copy_flash(struct mbox_context *context, uint32_t offset, void *mem,
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 @@ int copy_flash(struct mbox_context *context, uint32_t offset, void *mem,
size -= size_read;
mem += size_read;
- }
+ } while (size && size_read);
- return 0;
+ return size ? -MBOX_R_SYSTEM_ERROR : 0;
}
/*
OpenPOWER on IntegriCloud