[U-Boot] [PATCH v2] cmd_sf: add size checking to spi flash commands
Mike Frysinger
vapier at gentoo.org
Sat Jul 21 19:29:57 CEST 2012
From: Gerlando Falauto <gerlando.falauto at keymile.com>
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 at keymile.com>
Signed-off-by: Mike Frysinger <vapier at gentoo.org>
---
v2
- tweaked the printf strings
common/cmd_sf.c | 14 ++++++++++++++
1 file changed, 14 insertions(+)
diff --git a/common/cmd_sf.c b/common/cmd_sf.c
index 9c76464..5ac1d0c 100644
--- a/common/cmd_sf.c
+++ b/common/cmd_sf.c
@@ -211,6 +211,13 @@ static int do_spi_flash_read_write(int argc, char * const argv[])
if (*argv[3] == 0 || *endp != 0)
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);
if (!buf) {
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)
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);
if (ret) {
printf("SPI flash %s failed\n", argv[0]);
--
1.7.9.7
More information about the U-Boot
mailing list