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

commit a7a11dd60db9f244e1a10bd0d5aecc041f36161f
Author:     Hermès Bélusca-Maïto <[email protected]>
AuthorDate: Sun Dec 24 22:37:19 2017 +0100
Commit:     Hermès Bélusca-Maïto <[email protected]>
CommitDate: Sun Oct 28 00:59:46 2018 +0200

    [SETUPLIB] Improve the bootloader 'validity' checks -- Addendum to f06734e5 
(r74512).
    
    Adapted from PR #89 by Serge Gautherie.
    This should improve the situation described in CORE-12672 and CORE-4870.
---
 base/setup/lib/bootsup.c | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)

diff --git a/base/setup/lib/bootsup.c b/base/setup/lib/bootsup.c
index 2f7b43fee3..5f0f694779 100644
--- a/base/setup/lib/bootsup.c
+++ b/base/setup/lib/bootsup.c
@@ -551,7 +551,6 @@ IsThereAValidBootSector(
     HANDLE FileHandle;
     LARGE_INTEGER FileOffset;
     PUCHAR BootSector;
-    ULONG Instruction;
 
     /* Allocate buffer for bootsector */
     BootSector = RtlAllocateHeap(ProcessHeap, 0, SECTORSIZE);
@@ -593,17 +592,18 @@ IsThereAValidBootSector(
     if (!NT_SUCCESS(Status))
         goto Quit;
 
-    /* Check the instruction; we use a ULONG to read three bytes */
-    Instruction = (*(PULONG)BootSector) & 0x00FFFFFF;
-    IsValid = (Instruction != 0x00000000);
-
-    /* Check the bootsector signature */
-    IsValid &= (*(PUSHORT)(BootSector + 0x1fe) == 0xaa55);
+    /* Check for the existence of the bootsector signature */
+    IsValid = (*(PUSHORT)(BootSector + 0x1FE) == 0xAA55);
+    if (IsValid)
+    {
+        /* Check for the first instruction encoded on three bytes */
+        IsValid = (((*(PULONG)BootSector) & 0x00FFFFFF) != 0x00000000);
+    }
 
 Quit:
     /* Free the boot sector */
     RtlFreeHeap(ProcessHeap, 0, BootSector);
-    return IsValid; // Status;
+    return IsValid;
 }
 
 static

Reply via email to