https://git.reactos.org/?p=reactos.git;a=commitdiff;h=a7a11dd60db9f244e1a10…
commit a7a11dd60db9f244e1a10bd0d5aecc041f36161f
Author: Hermès Bélusca-Maïto <hermes.belusca-maito(a)reactos.org>
AuthorDate: Sun Dec 24 22:37:19 2017 +0100
Commit: Hermès Bélusca-Maïto <hermes.belusca-maito(a)reactos.org>
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