https://git.reactos.org/?p=reactos.git;a=commitdiff;h=9b1e056e8f222279fe2eb1d7e2d9948365f2c68d

commit 9b1e056e8f222279fe2eb1d7e2d9948365f2c68d
Author: Serge Gautherie <[email protected]>
AuthorDate: Wed Oct 11 13:20:15 2017 +0200

    [FREELDR] Discard empty entries in PcMemGetBiosMemoryMap. CORE-13332
    
    Improve a TRACE() from f588de2e79e67fc7878e71dccb4ea67debdacf5e.
---
 boot/freeldr/freeldr/arch/i386/pcmem.c | 16 +++++++++++++++-
 1 file changed, 15 insertions(+), 1 deletion(-)

diff --git a/boot/freeldr/freeldr/arch/i386/pcmem.c 
b/boot/freeldr/freeldr/arch/i386/pcmem.c
index 61cd694070..2c615914f1 100644
--- a/boot/freeldr/freeldr/arch/i386/pcmem.c
+++ b/boot/freeldr/freeldr/arch/i386/pcmem.c
@@ -286,6 +286,13 @@ PcMemGetBiosMemoryMap(PFREELDR_MEMORY_DESCRIPTOR 
MemoryMap, ULONG MaxMemoryMapSi
             break;
         }
 
+        if (Regs.x.ecx == 0)
+        {
+            TRACE("Discard empty entry. (would-be-PcBiosMapCount = %lu)\n",
+                  PcBiosMapCount);
+            goto nextRange;
+        }
+
         /* Copy data to global buffer */
         RtlCopyMemory(&PcBiosMemoryMap[PcBiosMapCount], (PVOID)BIOSCALLBUFFER, 
Regs.x.ecx);
 
@@ -295,6 +302,13 @@ PcMemGetBiosMemoryMap(PFREELDR_MEMORY_DESCRIPTOR 
MemoryMap, ULONG MaxMemoryMapSi
         TRACE("Reserved: 0x%lx\n", PcBiosMemoryMap[PcBiosMapCount].Reserved);
         TRACE("\n");
 
+        if (PcBiosMemoryMap[PcBiosMapCount].Length == 0)
+        {
+            TRACE("Discard empty range. (would-be-PcBiosMapCount = %lu, 
BaseAddress = %lu, Length = 0)\n",
+                  PcBiosMapCount, PcBiosMemoryMap[PcBiosMapCount].BaseAddress);
+            goto nextRange;
+        }
+
         /* Check if this is free memory */
         if (PcBiosMemoryMap[PcBiosMapCount].Type == BiosMemoryUsable)
         {
@@ -314,7 +328,7 @@ PcMemGetBiosMemoryMap(PFREELDR_MEMORY_DESCRIPTOR MemoryMap, 
ULONG MaxMemoryMapSi
             if (EndAddress <= RealBaseAddress)
             {
                 /* This doesn't span any page, so continue with next range */
-                TRACE("Skipping aligned range < PAGE_SIZE. (PcBiosMapCount = 
%lu, BaseAddress = %lu, Length = %lu)\n",
+                TRACE("Skipping aligned range < PAGE_SIZE. 
(would-be-PcBiosMapCount = %lu, BaseAddress = %lu, Length = %lu)\n",
                       PcBiosMapCount,
                       PcBiosMemoryMap[PcBiosMapCount].BaseAddress,
                       PcBiosMemoryMap[PcBiosMapCount].Length);

Reply via email to