Skip to content
Permalink
Browse files

fw_env: correct writes to devices with small erase blocks

Some NOR flash devices have a small erase block size.  For example, the
Micron N25Q512 can erase in 4K blocks.  These devices expose a bug in
fw_env.c where flash_write_buf() incorrectly calculates bytes written
and attempts to write past the environment sectors.  Luckily, a range
check prevents any real damage, but this does cause fw_setenv to fail
with an error.

This change corrects the write length calculation.

The bug was introduced with commit 5608692 from 2008 and only affects
configurations where the erase block size is smaller than the total
environment data size.

Signed-off-by: Dustin Byford <dustin@cumulusnetworks.com>
  • Loading branch information
Dustin Byford authored and trini committed Mar 7, 2014
1 parent 23869bf commit 4b774ff114201175ea9c05dfa12eef3ff1704753
Showing with 2 additions and 2 deletions.
  1. +2 −2 tools/env/fw_env.c
@@ -863,9 +863,9 @@ static int flash_write_buf (int dev, int fd, void *buf, size_t count,
if (mtd_type != MTD_ABSENT)
ioctl(fd, MEMLOCK, &erase);

processed += blocklen;
processed += erasesize;
block_seek = 0;
blockstart += blocklen;
blockstart += erasesize;
}

if (write_total > count)

0 comments on commit 4b774ff

Please sign in to comment.
You can’t perform that action at this time.