Skip to content
Snippets Groups Projects
Commit 4ba73a5a authored by Hans de Goede's avatar Hans de Goede Committed by Ian Campbell
Browse files

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: default avatarHans de Goede <hdegoede@redhat.com>
Acked-by: default avatarIan Campbell <ijc@hellion.org.uk>
parent 23f23f23
No related branches found
No related tags found
No related merge requests found
...@@ -77,7 +77,7 @@ int main(int argc, char *argv[]) ...@@ -77,7 +77,7 @@ int main(int argc, char *argv[])
{ {
int fd_in, fd_out; int fd_in, fd_out;
struct boot_img img; struct boot_img img;
unsigned file_size, load_size; unsigned file_size;
int count; int count;
if (argc < 2) { if (argc < 2) {
...@@ -101,8 +101,6 @@ int main(int argc, char *argv[]) ...@@ -101,8 +101,6 @@ int main(int argc, char *argv[])
if (file_size > SRAM_LOAD_MAX_SIZE) { if (file_size > SRAM_LOAD_MAX_SIZE) {
fprintf(stderr, "ERROR: File too large!\n"); fprintf(stderr, "ERROR: File too large!\n");
return EXIT_FAILURE; return EXIT_FAILURE;
} else {
load_size = ALIGN(file_size, sizeof(int));
} }
fd_out = open(argv[2], O_WRONLY | O_CREAT, 0666); fd_out = open(argv[2], O_WRONLY | O_CREAT, 0666);
...@@ -113,8 +111,8 @@ int main(int argc, char *argv[]) ...@@ -113,8 +111,8 @@ int main(int argc, char *argv[])
/* read file to buffer to calculate checksum */ /* read file to buffer to calculate checksum */
lseek(fd_in, 0, SEEK_SET); lseek(fd_in, 0, SEEK_SET);
count = read(fd_in, img.code, load_size); count = read(fd_in, img.code, file_size);
if (count != load_size) { if (count != file_size) {
perror("Reading input image"); perror("Reading input image");
return EXIT_FAILURE; return EXIT_FAILURE;
} }
...@@ -126,7 +124,7 @@ int main(int argc, char *argv[]) ...@@ -126,7 +124,7 @@ int main(int argc, char *argv[])
& 0x00FFFFFF); & 0x00FFFFFF);
memcpy(img.header.magic, BOOT0_MAGIC, 8); /* no '0' termination */ memcpy(img.header.magic, BOOT0_MAGIC, 8); /* no '0' termination */
img.header.length = 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); gen_check_sum(&img.header);
count = write(fd_out, &img, img.header.length); count = write(fd_out, &img, img.header.length);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment