cmd_sf: add size checking to spi flash commands
SPI flash operations inadvertently stretching beyond the flash size will result in a wraparound. This may be particularly dangerous when burning u-boot, because the flash contents will be corrupted rendering the board unusable, without any warning being issued. So add a consistency checking so not to overflow past the flash size. Signed-off-by: Gerlando Falauto <gerlando.falauto@keymile.com> Signed-off-by: Mike Frysinger <vapier@gentoo.org>
This commit is contained in:
parent
41e1713425
commit
864939949e
|
@ -211,6 +211,13 @@ static int do_spi_flash_read_write(int argc, char * const argv[])
|
||||||
if (*argv[3] == 0 || *endp != 0)
|
if (*argv[3] == 0 || *endp != 0)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
|
/* Consistency checking */
|
||||||
|
if (offset + len > flash->size) {
|
||||||
|
printf("ERROR: attempting %s past flash size (%#x)\n",
|
||||||
|
argv[0], flash->size);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
buf = map_physmem(addr, len, MAP_WRBACK);
|
buf = map_physmem(addr, len, MAP_WRBACK);
|
||||||
if (!buf) {
|
if (!buf) {
|
||||||
puts("Failed to map physical memory\n");
|
puts("Failed to map physical memory\n");
|
||||||
|
@ -252,6 +259,13 @@ static int do_spi_flash_erase(int argc, char * const argv[])
|
||||||
if (ret != 1)
|
if (ret != 1)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
|
/* Consistency checking */
|
||||||
|
if (offset + len > flash->size) {
|
||||||
|
printf("ERROR: attempting %s past flash size (%#x)\n",
|
||||||
|
argv[0], flash->size);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
ret = spi_flash_erase(flash, offset, len);
|
ret = spi_flash_erase(flash, offset, len);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
printf("SPI flash %s failed\n", argv[0]);
|
printf("SPI flash %s failed\n", argv[0]);
|
||||||
|
|
Loading…
Reference in New Issue