mirror of
https://github.com/sheumann/hush.git
synced 2024-09-12 00:55:11 +00:00
nandwrite: always check the first erase block
Current code does not check the first erase block when mtdoffset is not erase block aligned. Fix this. Signed-off-by: Baruch Siach <baruch@tkos.co.il> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
parent
b32a543663
commit
7715b48c36
@ -52,7 +52,7 @@ int nandwrite_main(int argc UNUSED_PARAM, char **argv)
|
|||||||
unsigned opts;
|
unsigned opts;
|
||||||
int fd;
|
int fd;
|
||||||
ssize_t cnt;
|
ssize_t cnt;
|
||||||
unsigned mtdoffset, meminfo_writesize;
|
unsigned mtdoffset, meminfo_writesize, blockstart;
|
||||||
struct mtd_info_user meminfo;
|
struct mtd_info_user meminfo;
|
||||||
unsigned char *filebuf;
|
unsigned char *filebuf;
|
||||||
const char *opt_s = "0";
|
const char *opt_s = "0";
|
||||||
@ -83,9 +83,21 @@ int nandwrite_main(int argc UNUSED_PARAM, char **argv)
|
|||||||
|
|
||||||
filebuf = xmalloc(meminfo_writesize);
|
filebuf = xmalloc(meminfo_writesize);
|
||||||
|
|
||||||
|
blockstart = mtdoffset & ~(meminfo.erasesize - 1);
|
||||||
|
if (blockstart != mtdoffset) {
|
||||||
|
unsigned tmp;
|
||||||
|
/* mtdoffset is in the middle of an erase block, verify that
|
||||||
|
* this block is OK. Advance mtdoffset only if this block is
|
||||||
|
* bad.
|
||||||
|
*/
|
||||||
|
tmp = next_good_eraseblock(fd, &meminfo, blockstart);
|
||||||
|
if (tmp != blockstart) /* bad block(s), advance mtdoffset */
|
||||||
|
mtdoffset = tmp;
|
||||||
|
}
|
||||||
|
|
||||||
cnt = -1;
|
cnt = -1;
|
||||||
while (mtdoffset < meminfo.size) {
|
while (mtdoffset < meminfo.size) {
|
||||||
unsigned blockstart = mtdoffset & ~(meminfo.erasesize - 1);
|
blockstart = mtdoffset & ~(meminfo.erasesize - 1);
|
||||||
if (blockstart == mtdoffset) {
|
if (blockstart == mtdoffset) {
|
||||||
/* starting a new eraseblock */
|
/* starting a new eraseblock */
|
||||||
mtdoffset = next_good_eraseblock(fd, &meminfo, blockstart);
|
mtdoffset = next_good_eraseblock(fd, &meminfo, blockstart);
|
||||||
|
Loading…
Reference in New Issue
Block a user