diff options
Diffstat (limited to 'common/cmd_sf.c')
| -rw-r--r-- | common/cmd_sf.c | 14 | 
1 files changed, 14 insertions, 0 deletions
| diff --git a/common/cmd_sf.c b/common/cmd_sf.c index 9c76464a9..5ac1d0c4c 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]); |