From bd3ccd482653b12920701b33e6d14ba596cafeac Mon Sep 17 00:00:00 2001 From: Pierre Schweitzer Date: Tue, 10 Sep 2013 13:42:34 +0000 Subject: [PATCH] [NTOSKRNL] Fix string size to store GPT GUIDs. This was causing a buffer overflow (with ending null char) and thus a stack corruption. The side effect of the stack corruption was that the debug code (display) was looping forever while attempting to read partition table making ntoskrnl unable to boot with a machine where there's a GPT disk. Kernel is now able again to handle GPT disks (and they can be used again in user-land). This was magically hidding before r59923 or by disabling NDEBUG. Lovely Heisenbugs :-). svn path=/trunk/; revision=60003 --- reactos/ntoskrnl/fstub/fstubex.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/reactos/ntoskrnl/fstub/fstubex.c b/reactos/ntoskrnl/fstub/fstubex.c index a668cdfa069..a9e1bcb77c3 100644 --- a/reactos/ntoskrnl/fstub/fstubex.c +++ b/reactos/ntoskrnl/fstub/fstubex.c @@ -86,6 +86,8 @@ typedef struct _MASTER_BOOT_RECORD #define EFI_HEADER_REVISION_1 0x00010000 /* Defines system type for MBR showing that a GPT is following */ #define EFI_PMBR_OSTYPE_EFI 0xEE +/* Defines size to store a complete GUID + null char */ +#define EFI_GUID_STRING_SIZE 0x27 #define IS_VALID_DISK_INFO(Disk) \ (Disk) && \ @@ -534,7 +536,7 @@ NTAPI FstubDbgPrintDriveLayoutEx(IN PDRIVE_LAYOUT_INFORMATION_EX DriveLayout) { ULONG i; - CHAR Guid[38]; + CHAR Guid[EFI_GUID_STRING_SIZE]; PAGED_CODE(); DPRINT("FSTUB: DRIVE_LAYOUT_INFORMATION_EX: %p\n", DriveLayout); @@ -575,7 +577,7 @@ NTAPI FstubDbgPrintPartitionEx(IN PPARTITION_INFORMATION_EX PartitionEntry, IN ULONG PartitionNumber) { - CHAR Guid[38]; + CHAR Guid[EFI_GUID_STRING_SIZE]; PAGED_CODE(); DPRINT("Printing partition %lu\n", PartitionNumber); @@ -614,7 +616,7 @@ NTAPI FstubDbgPrintSetPartitionEx(IN PSET_PARTITION_INFORMATION_EX PartitionEntry, IN ULONG PartitionNumber) { - CHAR Guid[38]; + CHAR Guid[EFI_GUID_STRING_SIZE]; PAGED_CODE(); DPRINT("FSTUB: SET_PARTITION_INFORMATION_EX: %p\n", PartitionEntry);