diff --git a/fel.c b/fel.c index 0fdefad..148e558 100644 --- a/fel.c +++ b/fel.c @@ -764,6 +764,15 @@ void aw_fel_write_uboot_image(feldev_handle *dev, uint8_t *buf, size_t len) image_header_t hdr = *(image_header_t *)buf; + uint32_t hcrc = be32toh(hdr.ih_hcrc); + + /* The CRC is calculated on the whole header but the CRC itself */ + hdr.ih_hcrc = 0; + uint32_t computed_hcrc = crc32(0, (const uint8_t *) &hdr, HEADER_SIZE); + if (hcrc != computed_hcrc) + pr_fatal("U-Boot header CRC mismatch: expected %x, got %x\n", + hcrc, computed_hcrc); + /* Check for a valid mkimage header */ int image_type = get_image_type(buf, len); if (image_type <= IH_TYPE_INVALID) {