diff --git a/tools/firmware-utils/src/imagetag.c b/tools/firmware-utils/src/imagetag.c index 658674ec7..0ecbada28 100644 --- a/tools/firmware-utils/src/imagetag.c +++ b/tools/firmware-utils/src/imagetag.c @@ -32,9 +32,9 @@ union int2char { char output[4]; }; -/* This appears to be necessary due to alignment issues */ +/* Convert uint32_t CRC to bigendian and copy it into a character array */ #define int2tag(tag, value) intchar.input = htonl(value); \ - strncpy(tag, intchar.output, sizeof(union int2char)) + memcpy(tag, intchar.output, sizeof(union int2char)) /* Kernel header */ struct kernelhdr { @@ -94,7 +94,7 @@ uint32_t compute_crc32(uint32_t crc, FILE *binfile, size_t compute_start, size_t size_t read; fseek(binfile, compute_start, SEEK_SET); - + /* read block of 1024 bytes */ while (binfile && !feof(binfile) && !ferror(binfile) && (compute_len >= sizeof(readbuf))) { read = fread(readbuf, sizeof(uint8_t), sizeof(readbuf), binfile); @@ -221,7 +221,7 @@ int tagfile(const char *kernel, const char *rootfs, const char *bin, printf("Data alignment to %dk with 'deadc0de' appended\n", flash_bs/1024); fseek(binfile, rootfsoff + rootfslen - fwaddr, SEEK_SET); fwrite(&deadcode, sizeof(uint32_t), 1, binfile); - + /* Flush the binfile buffer so that when we read from file, it contains * everything in the buffer */ @@ -243,7 +243,7 @@ int tagfile(const char *kernel, const char *rootfs, const char *bin, * needs to be rootfs + deadcode */ rootfscrc = compute_crc32(rootfscrc, binfile, kerneloff - fwaddr, rootfslen + sizeof(deadcode)); - + /* Close the files */ fclose(kernelfile); fclose(rootfsfile); @@ -306,7 +306,7 @@ int main(int argc, char **argv) uint32_t flashstart, fwoffset, loadaddr, entry; uint32_t fwaddr, flash_bs; int tagidfound = 0; - + kernel = rootfs = bin = boardid = chipid = magic2 = ver = rsignature = layoutver = NULL; entry = 0; @@ -394,11 +394,11 @@ int main(int argc, char **argv) fprintf(stderr, "You need to specify the kernel entry (-e)\n"); return 1; } - + /* Fallback to defaults */ fwaddr = flashstart + fwoffset; - + if (!magic2) { magic2 = malloc(sizeof(char) * 14); if (!magic2) { @@ -416,7 +416,7 @@ int main(int argc, char **argv) } strcpy(ver, IMAGETAG_VER); } - + return tagfile(kernel, rootfs, bin, boardid, chipid, fwaddr, loadaddr, entry, ver, magic2, flash_bs, rsignature, layoutver); }