diff options
author | Aidan MacDonald <amachronic@protonmail.com> | 2022-03-04 11:40:12 +0000 |
---|---|---|
committer | Aidan MacDonald <amachronic@protonmail.com> | 2022-03-04 08:57:35 -0500 |
commit | 3cb7167e2206fa39d9fc20920727f4b858f0dac6 (patch) | |
tree | 91234cde6de07cdeb3629b5b24dd1dd23bba8788 /firmware/target/mips/ingenic_x1000 | |
parent | 3bd5f335f75398382944386cd36cfa3224e991c4 (diff) | |
download | rockbox-3cb7167e2206fa39d9fc20920727f4b858f0dac6.tar.gz rockbox-3cb7167e2206fa39d9fc20920727f4b858f0dac6.zip |
x1000: fix bug in nand_read_bytes
This didn't account for partial page reads properly which resulted
in corrupted data. Fortunately, current released bootloaders do not
perform such reads so they don't trigger this bug.
Change-Id: I426a95ef8d0f20f4567498530e216d80e1aceef2
Diffstat (limited to 'firmware/target/mips/ingenic_x1000')
-rw-r--r-- | firmware/target/mips/ingenic_x1000/nand-x1000.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/firmware/target/mips/ingenic_x1000/nand-x1000.c b/firmware/target/mips/ingenic_x1000/nand-x1000.c index a818ba10aa..67f1aead45 100644 --- a/firmware/target/mips/ingenic_x1000/nand-x1000.c +++ b/firmware/target/mips/ingenic_x1000/nand-x1000.c | |||
@@ -290,14 +290,14 @@ int nand_read_bytes(nand_drv* drv, uint32_t byte_addr, uint32_t byte_len, void* | |||
290 | if(rc < 0) | 290 | if(rc < 0) |
291 | return rc; | 291 | return rc; |
292 | 292 | ||
293 | memcpy(buffer, &drv->page_buf[offset], MIN(pg_size, byte_len)); | 293 | memcpy(buffer, &drv->page_buf[offset], MIN(pg_size - offset, byte_len)); |
294 | 294 | ||
295 | if(byte_len <= pg_size) | 295 | if(byte_len <= pg_size - offset) |
296 | break; | 296 | break; |
297 | 297 | ||
298 | byte_len -= pg_size - offset; | ||
299 | buffer += pg_size - offset; | ||
298 | offset = 0; | 300 | offset = 0; |
299 | byte_len -= pg_size; | ||
300 | buffer += pg_size; | ||
301 | page++; | 301 | page++; |
302 | } | 302 | } |
303 | 303 | ||