[PATCH 1/6] ARM: am33xx update SPI NOR: Check image size before flashing

Sascha Hauer s.hauer at pengutronix.de
Tue Sep 30 06:10:27 PDT 2014


Test if the image fits into the partition before flashing it. Makes
the update process more safe.

Signed-off-by: Sascha Hauer <s.hauer at pengutronix.de>
---
 arch/arm/mach-omap/am33xx_bbu_spi_mlo.c | 13 +++++++++++++
 1 file changed, 13 insertions(+)

diff --git a/arch/arm/mach-omap/am33xx_bbu_spi_mlo.c b/arch/arm/mach-omap/am33xx_bbu_spi_mlo.c
index 665a53b..c979302 100644
--- a/arch/arm/mach-omap/am33xx_bbu_spi_mlo.c
+++ b/arch/arm/mach-omap/am33xx_bbu_spi_mlo.c
@@ -19,6 +19,7 @@
 #include <bbu.h>
 #include <fs.h>
 #include <fcntl.h>
+#include <linux/stat.h>
 
 /*
  * AM35xx, AM33xx chips use big endian MLO for SPI NOR flash
@@ -34,6 +35,7 @@ static int spi_nor_mlo_handler(struct bbu_handler *handler,
 	void *image = data->image;
 	uint32_t *header;
 	int swap = 0;
+	struct stat s;
 
 	header = data->image;
 
@@ -46,6 +48,17 @@ static int spi_nor_mlo_handler(struct bbu_handler *handler,
 			return -EINVAL;
 	}
 
+	ret = stat(data->devicefile, &s);
+	if (ret) {
+		printf("could not open %s: %s", data->devicefile, errno_str());
+		return ret;
+	}
+
+	if (size > s.st_size) {
+		printf("Image too big, need %d, have %lld\n", size, s.st_size);
+		return -ENOSPC;
+	}
+
 	dstfd = open(data->devicefile, O_WRONLY);
 	if (dstfd < 0) {
 		printf("could not open %s: %s", data->devicefile, errno_str());
-- 
2.1.0




More information about the barebox mailing list