summaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
authorHans de Goede <hdegoede@redhat.com>2014-06-09 11:36:53 +0200
committerIan Campbell <ijc@hellion.org.uk>2014-07-06 17:41:13 +0100
commit4ba73a5ac7d2ece1d17bb1c109d694ce306ac1af (patch)
tree52f4e6e61000005fafbd0aba42deff641ca7fefb /tools
parent23f23f23d509e8e873797884456070c8a47d72b2 (diff)
downloadu-boot-imx-4ba73a5ac7d2ece1d17bb1c109d694ce306ac1af.zip
u-boot-imx-4ba73a5ac7d2ece1d17bb1c109d694ce306ac1af.tar.gz
u-boot-imx-4ba73a5ac7d2ece1d17bb1c109d694ce306ac1af.tar.bz2
sunxi: mksunxiboot: Fix loading of files with a size which is not a multiple of 4
We should not be aligning the amount of bytes which we try to read from the disk, this leads to trying to read more bytes then there are which fails. file_size is already aligned to BLOCK_SIZE before being stored in img.header.length, so there is no need for load_size at all. Signed-off-by: Hans de Goede <hdegoede@redhat.com> Acked-by: Ian Campbell <ijc@hellion.org.uk>
Diffstat (limited to 'tools')
-rw-r--r--tools/mksunxiboot.c10
1 files changed, 4 insertions, 6 deletions
diff --git a/tools/mksunxiboot.c b/tools/mksunxiboot.c
index da7c9f0..1f0fbae 100644
--- a/tools/mksunxiboot.c
+++ b/tools/mksunxiboot.c
@@ -77,7 +77,7 @@ int main(int argc, char *argv[])
{
int fd_in, fd_out;
struct boot_img img;
- unsigned file_size, load_size;
+ unsigned file_size;
int count;
if (argc < 2) {
@@ -101,8 +101,6 @@ int main(int argc, char *argv[])
if (file_size > SRAM_LOAD_MAX_SIZE) {
fprintf(stderr, "ERROR: File too large!\n");
return EXIT_FAILURE;
- } else {
- load_size = ALIGN(file_size, sizeof(int));
}
fd_out = open(argv[2], O_WRONLY | O_CREAT, 0666);
@@ -113,8 +111,8 @@ int main(int argc, char *argv[])
/* read file to buffer to calculate checksum */
lseek(fd_in, 0, SEEK_SET);
- count = read(fd_in, img.code, load_size);
- if (count != load_size) {
+ count = read(fd_in, img.code, file_size);
+ if (count != file_size) {
perror("Reading input image");
return EXIT_FAILURE;
}
@@ -126,7 +124,7 @@ int main(int argc, char *argv[])
& 0x00FFFFFF);
memcpy(img.header.magic, BOOT0_MAGIC, 8); /* no '0' termination */
img.header.length =
- ALIGN(load_size + sizeof(struct boot_file_head), BLOCK_SIZE);
+ ALIGN(file_size + sizeof(struct boot_file_head), BLOCK_SIZE);
gen_check_sum(&img.header);
count = write(fd_out, &img, img.header.length);