summaryrefslogtreecommitdiff
path: root/src/commonlib
diff options
context:
space:
mode:
authorBrandon Breitenstein <brandon.breitenstein@intel.com>2016-08-23 14:55:13 -0700
committerMartin Roth <martinroth@google.com>2016-09-02 18:11:14 +0200
commit51a0f7cee47a9e460f56932fba55d4b571e77f9d (patch)
tree524e23e8298876312d753680887e6d06a620f501 /src/commonlib
parent4bf48e8c3377e3d4b4284f7f84f3e338bbce6665 (diff)
commonlib: update fsp_relocate to make it compatible with UEFI 2.6
UEFI 2.6 spec casts the return of FFS_FILE2_SIZE to a UINT32 which cannot be read using read_le32(&returnval). Add in a cast in order to safeguard for any non x86 architecture that may use this relocate. The proper change will be to get the UEFI header files changed to not cast this return value. Change-Id: Ie1b50d99576ac42a0413204bbd599bab9f01828e Signed-off-by: Brandon Breitenstein <brandon.breitenstein@intel.com> Reviewed-on: https://review.coreboot.org/16309 Tested-by: build bot (Jenkins) Reviewed-by: Aaron Durbin <adurbin@chromium.org>
Diffstat (limited to 'src/commonlib')
-rw-r--r--src/commonlib/fsp_relocate.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/src/commonlib/fsp_relocate.c b/src/commonlib/fsp_relocate.c
index 7f1e49accf..57c0ac99eb 100644
--- a/src/commonlib/fsp_relocate.c
+++ b/src/commonlib/fsp_relocate.c
@@ -258,8 +258,15 @@ static size_t ffs_file_size(const EFI_FFS_FILE_HEADER *ffsfh)
{
size_t size;
- if (IS_FFS_FILE2(ffsfh))
- size = read_le32(&FFS_FILE2_SIZE(ffsfh));
+ if (IS_FFS_FILE2(ffsfh)) {
+ /*
+ * this cast is needed with UEFI 2.6 headers in order
+ * to read the UINT32 value that FFS_FILE2_SIZE converts
+ * the return into
+ */
+ uint32_t file2_size = FFS_FILE2_SIZE(ffsfh);
+ size = read_le32(&file2_size);
+ }
else {
size = read_le8(&ffsfh->Size[0]) << 0;
size |= read_le8(&ffsfh->Size[1]) << 8;