From 9700e91b10411d5b5b5d3ff9345573557cf24c84 Mon Sep 17 00:00:00 2001 From: Arthur Heymans Date: Wed, 13 Jun 2018 15:39:57 +0200 Subject: [PATCH] cbfstool/fit.c: Fix for older CPUs without total_size in mcu_header Some older CPUs have a fixed size of 2048 bytes for microcode total size. Change-Id: Ia50c087af41b0df14b607ce3c3b4eabc602e8738 Signed-off-by: Arthur Heymans Reviewed-on: https://review.coreboot.org/27090 Reviewed-by: Patrick Georgi Tested-by: build bot (Jenkins) --- util/cbfstool/fit.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/util/cbfstool/fit.c b/util/cbfstool/fit.c index e3e6c32a6f..d33cb56749 100644 --- a/util/cbfstool/fit.c +++ b/util/cbfstool/fit.c @@ -226,13 +226,18 @@ static int parse_microcode_blob(struct cbfs_image *image, mcu_header = rom_buffer_pointer(&image->buffer, current_offset); + /* Newer microcode updates include a size field, whereas older + * containers set it at 0 and are exactly 2048 bytes long */ + uint32_t total_size = mcu_header->total_size + ? mcu_header->total_size : 2048; + /* Quickly sanity check a prospective microcode update. */ - if (mcu_header->total_size < sizeof(*mcu_header)) + if (total_size < sizeof(*mcu_header)) break; /* FIXME: Should the checksum be validated? */ mcus[num_mcus].offset = current_offset; - mcus[num_mcus].size = mcu_header->total_size; + mcus[num_mcus].size = total_size; /* Proceed to next payload. */ current_offset += mcus[num_mcus].size;