diff options
author | Andrew Jeffery <andrew@aj.id.au> | 2017-04-12 00:16:56 +0930 |
---|---|---|
committer | Andrew Jeffery <andrew@aj.id.au> | 2017-04-26 11:34:00 +0930 |
commit | 9aa5ff70dc515529675f432647fbbc39f7ee32fd (patch) | |
tree | b0d3a7ab737ca22815515ea3794107ba0ca71698 /mboxd_flash.c | |
parent | f1982e416f0476663442a07ab1a3979000b7980d (diff) | |
download | phosphor-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.c | 10 |
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; } /* |