diff options
author | Nico Huber <nico.huber@secunet.com> | 2017-05-09 16:03:24 +0200 |
---|---|---|
committer | Stefan Reinauer <stefan.reinauer@coreboot.org> | 2017-06-06 17:41:40 +0200 |
commit | e7947df4621ba27c6c41eccb1a98ec414db1082b (patch) | |
tree | 821bc61280c05140a963084658be1b565a911ba9 /src/drivers/intel/fsp1_1 | |
parent | c272a87f5c2e3a5173b24c0544297bbcb550c40f (diff) |
fsp1_1: Verify FSP_IMAGE_ID/_REV against headers
FSP_IMAGE_ID and FSP_IMAGE_REV are defined in `FspUpdVpd.h`. Check
against these to avoid mismatching definitions in coreboot and the
FSP blob.
Change-Id: Ic86229e7f0c2d0525b8a79add292c6c81a349aa6
Signed-off-by: Nico Huber <nico.huber@secunet.com>
Reviewed-on: https://review.coreboot.org/19635
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Stefan Reinauer <stefan.reinauer@coreboot.org>
Diffstat (limited to 'src/drivers/intel/fsp1_1')
-rw-r--r-- | src/drivers/intel/fsp1_1/Kconfig | 7 | ||||
-rw-r--r-- | src/drivers/intel/fsp1_1/fsp_util.c | 17 | ||||
-rw-r--r-- | src/drivers/intel/fsp1_1/include/fsp/util.h | 1 |
3 files changed, 8 insertions, 17 deletions
diff --git a/src/drivers/intel/fsp1_1/Kconfig b/src/drivers/intel/fsp1_1/Kconfig index 13137ca831..1b3061c2d4 100644 --- a/src/drivers/intel/fsp1_1/Kconfig +++ b/src/drivers/intel/fsp1_1/Kconfig @@ -50,13 +50,6 @@ config FSP_FILE help The path and filename of the Intel FSP binary for this platform. -config FSP_IMAGE_ID_STRING - string "8 byte platform string identifying the FSP platform" - default "$XXXFSP$" - help - 8 ASCII character byte signature string that will help match the FSP - binary to a supported hardware configuration. - config FSP_LOC hex "Intel FSP Binary location in CBFS" default 0xffee0000 diff --git a/src/drivers/intel/fsp1_1/fsp_util.c b/src/drivers/intel/fsp1_1/fsp_util.c index 0d09483f10..8b23c4a388 100644 --- a/src/drivers/intel/fsp1_1/fsp_util.c +++ b/src/drivers/intel/fsp1_1/fsp_util.c @@ -32,14 +32,8 @@ FSP_INFO_HEADER *find_fsp(uintptr_t fsp_base_address) EFI_RAW_SECTION *rs; u32 u32; } fsp_ptr; - static const union { - char str_id[8]; - u32 int_id[2]; - } fsp_id = { - .str_id = CONFIG_FSP_IMAGE_ID_STRING - }; - u32 *image_id; + u64 *image_id; /* Get the FSP binary base address in CBFS */ fsp_ptr.u32 = fsp_base_address; @@ -79,11 +73,14 @@ FSP_INFO_HEADER *find_fsp(uintptr_t fsp_base_address) return (FSP_INFO_HEADER *)ERROR_INFO_HEAD_SIG_MISMATCH; /* Verify the FSP ID */ - image_id = (u32 *)&fsp_ptr.fih->ImageId[0]; - if ((image_id[0] != fsp_id.int_id[0]) - || (image_id[1] != fsp_id.int_id[1])) + image_id = (u64 *)&fsp_ptr.fih->ImageId[0]; + if (*image_id != FSP_IMAGE_ID) return (FSP_INFO_HEADER *)ERROR_FSP_SIG_MISMATCH; + /* Verify the FSP Revision */ + if (fsp_ptr.fih->ImageRevision != FSP_IMAGE_REV) + return (FSP_INFO_HEADER *)ERROR_FSP_REV_MISMATCH; + return fsp_ptr.fih; } diff --git a/src/drivers/intel/fsp1_1/include/fsp/util.h b/src/drivers/intel/fsp1_1/include/fsp/util.h index 32ac99ee28..8f552560d5 100644 --- a/src/drivers/intel/fsp1_1/include/fsp/util.h +++ b/src/drivers/intel/fsp1_1/include/fsp/util.h @@ -87,6 +87,7 @@ int fsp_relocate(struct prog *fsp_relocd, const struct region_device *fsp_src); #define ERROR_IMAGEBASE_MISMATCH 4 #define ERROR_INFO_HEAD_SIG_MISMATCH 5 #define ERROR_FSP_SIG_MISMATCH 6 +#define ERROR_FSP_REV_MISMATCH 7 #if ENV_RAMSTAGE extern void *FspHobListPtr; |