[U-Boot] [PATCH] tools: fit_common: allow opening of block devices

During manufacturing it is useful to be able to verify integrity of secondary fit image by just running `./fit_check_sign -f /dev/mtdblock? -k ...` This was unfortunately failing as fstat(fd, sbuf) was setting sbuf->st_size to zero, which caused mmap to fail later on.
Signed-off-by: Radek Dostál radek.dostal@streamunlimited.com Reviewed-by: Vladimir Koutny vladimir.koutny@streamunlimited.com --- tools/fit_common.c | 10 ++++++++++ 1 file changed, 10 insertions(+)
diff --git a/tools/fit_common.c b/tools/fit_common.c index d96085e..2c917d3 100644 --- a/tools/fit_common.c +++ b/tools/fit_common.c @@ -22,6 +22,8 @@ #include "fit_common.h" #include <image.h> #include <u-boot/crc.h> +#include <sys/ioctl.h> +#include <linux/fs.h>
int fit_verify_header(unsigned char *ptr, int image_size, struct image_tool_params *params) @@ -58,6 +60,14 @@ int mmap_fdt(const char *cmdname, const char *fname, size_t size_inc, goto err; }
+ if (sbuf->st_size == 0 && S_ISBLK(sbuf->st_mode)) { + if (ioctl(fd, BLKGETSIZE64, &sbuf->st_size) < 0) { + fprintf(stderr, "%s: Can't determine size of %s: %s\n", + cmdname, fname, strerror(errno)); + goto err; + } + } + if (size_inc) { sbuf->st_size += size_inc; if (ftruncate(fd, sbuf->st_size)) {
participants (1)
-
Radek Dostál