[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