On Thu, 22 Sept 2022 at 22:40, Jeff Brasen <jbra...@nvidia.com> wrote: > > Update check for enough space to occur prior to alignment offset. > This prevents cases where EfiFreeMemoryTop < EfiFreeMemoryBottom. > > Change-Id: I58c5d378523c881a4afc655e7ace4c009130c781
Thanks for respinning this. Care to add a signed-off-by ? > --- > .../MemoryAllocationLib.c | 48 ++++++++----------- > 1 file changed, 21 insertions(+), 27 deletions(-) > > diff --git > a/EmbeddedPkg/Library/PrePiMemoryAllocationLib/MemoryAllocationLib.c > b/EmbeddedPkg/Library/PrePiMemoryAllocationLib/MemoryAllocationLib.c > index 2cc2a71121..08a0add340 100644 > --- a/EmbeddedPkg/Library/PrePiMemoryAllocationLib/MemoryAllocationLib.c > +++ b/EmbeddedPkg/Library/PrePiMemoryAllocationLib/MemoryAllocationLib.c > @@ -23,41 +23,35 @@ InternalAllocatePages ( > ) > { > EFI_PEI_HOB_POINTERS Hob; > - EFI_PHYSICAL_ADDRESS Offset; > + EFI_PHYSICAL_ADDRESS NewTop; > > Hob.Raw = GetHobList (); > > - // Check to see if on 4k boundary > - Offset = Hob.HandoffInformationTable->EfiFreeMemoryTop & 0xFFF; > - if (Offset != 0) { > - // If not aligned, make the allocation aligned. > - Hob.HandoffInformationTable->EfiFreeMemoryTop -= Offset; > - } > + NewTop = Hob.HandoffInformationTable->EfiFreeMemoryTop & > ~(EFI_PHYSICAL_ADDRESS)EFI_PAGE_MASK; > + NewTop -= Pages * EFI_PAGE_SIZE; > > // > // Verify that there is sufficient memory to satisfy the allocation > // > - if (Hob.HandoffInformationTable->EfiFreeMemoryTop - ((Pages * > EFI_PAGE_SIZE) + sizeof (EFI_HOB_MEMORY_ALLOCATION)) < > Hob.HandoffInformationTable->EfiFreeMemoryBottom) { > - return 0; > - } else { > - // > - // Update the PHIT to reflect the memory usage > - // > - Hob.HandoffInformationTable->EfiFreeMemoryTop -= Pages * EFI_PAGE_SIZE; > - > - // This routine used to create a memory allocation HOB a la PEI, but > that's not > - // necessary for us. > - > - // > - // Create a memory allocation HOB. > - // > - BuildMemoryAllocationHob ( > - Hob.HandoffInformationTable->EfiFreeMemoryTop, > - Pages * EFI_PAGE_SIZE, > - MemoryType > - ); > - return (VOID *)(UINTN)Hob.HandoffInformationTable->EfiFreeMemoryTop; > + if (NewTop < (Hob.HandoffInformationTable->EfiFreeMemoryBottom + sizeof > (EFI_HOB_MEMORY_ALLOCATION))) { > + return NULL; > } > + > + // > + // Update the PHIT to reflect the memory usage > + // > + Hob.HandoffInformationTable->EfiFreeMemoryTop = NewTop; > + > + // > + // Create a memory allocation HOB. > + // > + BuildMemoryAllocationHob ( > + Hob.HandoffInformationTable->EfiFreeMemoryTop, > + Pages * EFI_PAGE_SIZE, > + MemoryType > + ); > + > + return (VOID *)(UINTN)Hob.HandoffInformationTable->EfiFreeMemoryTop; > } > > /** > -- > 2.25.1 > -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#94145): https://edk2.groups.io/g/devel/message/94145 Mute This Topic: https://groups.io/mt/93857452/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-