mirror of
https://github.com/acidanthera/audk.git
synced 2025-04-08 17:05:09 +02:00
MdeModulePkg: Fix buffer overflow in MergeMemoryMap
Check that the next map entry is valid before dereferencing to merge the guard pages. If the final entry is at the end of a page with no valid page following it, then this can cause an access violation. Signed-off-by: Kenneth Lautner <kenlautner3@gmail.com>
This commit is contained in:
parent
a9b38305b6
commit
964c22b8ea
@ -395,11 +395,14 @@ MergeMemoryMap (
|
||||
NewMemoryMapEntry = MemoryMap;
|
||||
MemoryMapEnd = (EFI_MEMORY_DESCRIPTOR *)((UINT8 *)MemoryMap + *MemoryMapSize);
|
||||
while ((UINTN)MemoryMapEntry < (UINTN)MemoryMapEnd) {
|
||||
CopyMem (NewMemoryMapEntry, MemoryMapEntry, sizeof (EFI_MEMORY_DESCRIPTOR));
|
||||
CopyMem (NewMemoryMapEntry, MemoryMapEntry, DescriptorSize);
|
||||
NextMemoryMapEntry = NEXT_MEMORY_DESCRIPTOR (MemoryMapEntry, DescriptorSize);
|
||||
|
||||
do {
|
||||
MergeGuardPages (NewMemoryMapEntry, NextMemoryMapEntry->PhysicalStart);
|
||||
if ((UINTN)NextMemoryMapEntry < (UINTN)MemoryMapEnd) {
|
||||
MergeGuardPages (NewMemoryMapEntry, NextMemoryMapEntry->PhysicalStart);
|
||||
}
|
||||
|
||||
MemoryBlockLength = LShiftU64 (NewMemoryMapEntry->NumberOfPages, EFI_PAGE_SHIFT);
|
||||
if (((UINTN)NextMemoryMapEntry < (UINTN)MemoryMapEnd) &&
|
||||
(NewMemoryMapEntry->Type == NextMemoryMapEntry->Type) &&
|
||||
|
Loading…
x
Reference in New Issue
Block a user