mirror of https://github.com/acidanthera/audk.git
MdeModulePkg/BootGraphicsResourceTableDxe: don't allocate below 4 GB
The BGRT table has an 8 byte field for the memory address of the image data, and yet the driver explicitly allocates below 4 GB. This results in an ASSERT() on systems that do not have any memory below 4 GB to begin with. Since neither the PI, the UEFI or the ACPI spec contain any mention of why this data should reside below 4 GB, replace the allocation call with an ordinary AllocatePages() call. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org> Reviewed-by: Liming Gao <liming.gao@intel.com>
This commit is contained in:
parent
f859c6796f
commit
09da110819
|
@ -226,43 +226,6 @@ BgrtAcpiTableChecksum (
|
||||||
Buffer[ChecksumOffset] = CalculateCheckSum8 (Buffer, Size);
|
Buffer[ChecksumOffset] = CalculateCheckSum8 (Buffer, Size);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
Allocate EfiBootServicesData below 4G memory address.
|
|
||||||
|
|
||||||
This function allocates EfiBootServicesData below 4G memory address.
|
|
||||||
|
|
||||||
@param[in] Size Size of memory to allocate.
|
|
||||||
|
|
||||||
@return Allocated address for output.
|
|
||||||
|
|
||||||
**/
|
|
||||||
VOID *
|
|
||||||
BgrtAllocateBsDataMemoryBelow4G (
|
|
||||||
IN UINTN Size
|
|
||||||
)
|
|
||||||
{
|
|
||||||
UINTN Pages;
|
|
||||||
EFI_PHYSICAL_ADDRESS Address;
|
|
||||||
EFI_STATUS Status;
|
|
||||||
VOID *Buffer;
|
|
||||||
|
|
||||||
Pages = EFI_SIZE_TO_PAGES (Size);
|
|
||||||
Address = 0xffffffff;
|
|
||||||
|
|
||||||
Status = gBS->AllocatePages (
|
|
||||||
AllocateMaxAddress,
|
|
||||||
EfiBootServicesData,
|
|
||||||
Pages,
|
|
||||||
&Address
|
|
||||||
);
|
|
||||||
ASSERT_EFI_ERROR (Status);
|
|
||||||
|
|
||||||
Buffer = (VOID *) (UINTN) Address;
|
|
||||||
ZeroMem (Buffer, Size);
|
|
||||||
|
|
||||||
return Buffer;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Install Boot Graphics Resource Table to ACPI table.
|
Install Boot Graphics Resource Table to ACPI table.
|
||||||
|
|
||||||
|
@ -358,11 +321,13 @@ InstallBootGraphicsResourceTable (
|
||||||
// The image should be stored in EfiBootServicesData, allowing the system to reclaim the memory
|
// The image should be stored in EfiBootServicesData, allowing the system to reclaim the memory
|
||||||
//
|
//
|
||||||
BmpSize = (mLogoWidth * 3 + PaddingSize) * mLogoHeight + sizeof (BMP_IMAGE_HEADER);
|
BmpSize = (mLogoWidth * 3 + PaddingSize) * mLogoHeight + sizeof (BMP_IMAGE_HEADER);
|
||||||
ImageBuffer = BgrtAllocateBsDataMemoryBelow4G (BmpSize);
|
ImageBuffer = AllocatePages (EFI_SIZE_TO_PAGES (BmpSize));
|
||||||
if (ImageBuffer == NULL) {
|
if (ImageBuffer == NULL) {
|
||||||
return EFI_OUT_OF_RESOURCES;
|
return EFI_OUT_OF_RESOURCES;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ZeroMem (ImageBuffer, BmpSize);
|
||||||
|
|
||||||
mBmpImageHeaderTemplate.Size = (UINT32) BmpSize;
|
mBmpImageHeaderTemplate.Size = (UINT32) BmpSize;
|
||||||
mBmpImageHeaderTemplate.ImageSize = (UINT32) BmpSize - sizeof (BMP_IMAGE_HEADER);
|
mBmpImageHeaderTemplate.ImageSize = (UINT32) BmpSize - sizeof (BMP_IMAGE_HEADER);
|
||||||
mBmpImageHeaderTemplate.PixelWidth = (UINT32) mLogoWidth;
|
mBmpImageHeaderTemplate.PixelWidth = (UINT32) mLogoWidth;
|
||||||
|
|
Loading…
Reference in New Issue