From 0461d975e0c24469bb00239d1b5911376fc696df Mon Sep 17 00:00:00 2001 From: belliash Date: Sun, 15 Jan 2023 16:52:02 +0100 Subject: [PATCH] Check ExitBootServices() status code --- xtldr/amd64/memory.c | 7 ++++++- xtldr/i686/memory.c | 7 ++++++- xtldr/modules/xtos/xtos.c | 6 +++++- 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/xtldr/amd64/memory.c b/xtldr/amd64/memory.c index 094e90b..a45a763 100644 --- a/xtldr/amd64/memory.c +++ b/xtldr/amd64/memory.c @@ -113,7 +113,12 @@ BlEnablePaging(IN PLIST_ENTRY MemoryMappings, /* Exit EFI Boot Services */ BlDbgPrint(L"Exiting EFI boot services\n"); - EfiSystemTable->BootServices->ExitBootServices(EfiImageHandle, MemoryMap->MapKey); + Status = EfiSystemTable->BootServices->ExitBootServices(EfiImageHandle, MemoryMap->MapKey); + if(Status != STATUS_EFI_SUCCESS) + { + BlDbgPrint(L"Failed to exit boot services (Status code: %lx)\n", Status); + return STATUS_EFI_ABORTED; + } /* No runtime services should touch boot services code, so get rid of it all at this point */ EfiSystemTable->RuntimeServices->SetVirtualAddressMap(MemoryMap->MapSize, MemoryMap->DescriptorSize, diff --git a/xtldr/i686/memory.c b/xtldr/i686/memory.c index b7ea0dc..cabe06e 100644 --- a/xtldr/i686/memory.c +++ b/xtldr/i686/memory.c @@ -199,7 +199,12 @@ BlEnablePaging(IN PLIST_ENTRY MemoryMappings, /* Exit EFI Boot Services */ BlDbgPrint(L"Exiting EFI boot services\n"); - EfiSystemTable->BootServices->ExitBootServices(EfiImageHandle, MemoryMap->MapKey); + Status = EfiSystemTable->BootServices->ExitBootServices(EfiImageHandle, MemoryMap->MapKey); + if(Status != STATUS_EFI_SUCCESS) + { + BlDbgPrint(L"Failed to exit boot services (Status code: %lx)\n", Status); + return STATUS_EFI_ABORTED; + } /* No runtime services should touch boot services code, so get rid of it all at this point */ EfiSystemTable->RuntimeServices->SetVirtualAddressMap(MemoryMap->MapSize, MemoryMap->DescriptorSize, diff --git a/xtldr/modules/xtos/xtos.c b/xtldr/modules/xtos/xtos.c index 156221e..ed3866b 100644 --- a/xtldr/modules/xtos/xtos.c +++ b/xtldr/modules/xtos/xtos.c @@ -238,7 +238,11 @@ XtpBootSequence(IN PEFI_FILE_HANDLE BootDir, /* Enable paging */ EfiSystemTable->BootServices->HandleProtocol(EfiImageHandle, &LoadedImageGuid, (PVOID*)&ImageProtocol); - XtLdrProtocol->EnablePaging(&MemoryMappings, VirtualAddress, ImageProtocol, &XtPageMap); + Status = XtLdrProtocol->EnablePaging(&MemoryMappings, VirtualAddress, ImageProtocol, &XtPageMap); + if(Status != STATUS_EFI_SUCCESS) + { + return Status; + } /* Call XTOS kernel */ XtLdrProtocol->DbgPrint(L"Booting the XTOS kernel\n");