]> git.kernelconcepts.de Git - karo-tx-uboot.git/commitdiff
sunxi: mksunxiboot: Fix loading of files with a size which is not a multiple of 4
authorHans de Goede <hdegoede@redhat.com>
Mon, 9 Jun 2014 09:36:53 +0000 (11:36 +0200)
committerIan Campbell <ijc@hellion.org.uk>
Sun, 6 Jul 2014 16:41:13 +0000 (17:41 +0100)
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>
tools/mksunxiboot.c

index da7c9f0ddc004adf9f7402a876a400ecc16cdf93..1f0fbae8e17dd4432912d95be4883d2dca273772 100644 (file)
@@ -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);