UPSTREAM: 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.

BUG=None
BRANCH=None
TEST=None

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>

Change-Id: Ie1b50d99576ac42a0413204bbd599bab9f01828e
Reviewed-on: https://chromium-review.googlesource.com/381005
Commit-Ready: Furquan Shaikh <furquan@chromium.org>
Tested-by: Furquan Shaikh <furquan@chromium.org>
Reviewed-by: Aaron Durbin <adurbin@chromium.org>
This commit is contained in:
Brandon Breitenstein 2016-08-23 14:55:13 -07:00 committed by chrome-bot
parent c355c66347
commit 6ffaac1d11

View file

@ -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;