diff options
| author | Amlal El Mahrouss <amlalelmahrouss@icloud.com> | 2024-02-04 12:52:03 +0100 |
|---|---|---|
| committer | Amlal El Mahrouss <amlalelmahrouss@icloud.com> | 2024-02-04 12:52:03 +0100 |
| commit | 46ec13f846a25dffaac0525d45003e7ee2a101ff (patch) | |
| tree | 7810bfd4703b01dc010d626519d5cfee05c63fb7 /Private/NewBoot/Source/FileReader.cxx | |
| parent | e2bbec91d70847cc5a2ff67eb84ca4a3c2d03e85 (diff) | |
Fix: EFI implementation of FileProtocol was buggy, fixed it.
Signed-off-by: Amlal El Mahrouss <amlalelmahrouss@icloud.com>
Diffstat (limited to 'Private/NewBoot/Source/FileReader.cxx')
| -rw-r--r-- | Private/NewBoot/Source/FileReader.cxx | 34 |
1 files changed, 23 insertions, 11 deletions
diff --git a/Private/NewBoot/Source/FileReader.cxx b/Private/NewBoot/Source/FileReader.cxx index 3edacb5a..7bcccc10 100644 --- a/Private/NewBoot/Source/FileReader.cxx +++ b/Private/NewBoot/Source/FileReader.cxx @@ -16,6 +16,7 @@ #include <EFIKit/Api.hxx> #include "EFIKit/EFI.hxx" +#include "NewKit/Defines.hpp" //////////////////////////////////////////////////////////////////////////////////////////////////// // @@ -64,17 +65,13 @@ HCore::VoidPtr BFileReader::Fetch(EfiHandlePtr ImageHandle) { EfiLoadImageProtocol* img = nullptr; EfiGUID guidImg = EfiGUID(EFI_LOADED_IMAGE_PROTOCOL_GUID); - if (BS->OpenProtocol(ImageHandle, &guidImg, (void**)&img, ImageHandle, - nullptr, - EFI_OPEN_PROTOCOL_BY_HANDLE_PROTOCOL) != kEfiOk) { + if (BS->HandleProtocol(ImageHandle, &guidImg, (void**)&img) != kEfiOk) { mWriter.WriteString(L"HCoreLdr: Fetch-Protocol: No-Such-Protocol") .WriteString(L"\r\n"); this->mErrorCode = kNotSupported; } - if (BS->OpenProtocol(img->DeviceHandle, &guidEfp, (void**)&efp, ImageHandle, - nullptr, - EFI_OPEN_PROTOCOL_BY_HANDLE_PROTOCOL) != kEfiOk) { + if (BS->HandleProtocol(img->DeviceHandle, &guidEfp, (void**)&efp) != kEfiOk) { mWriter.WriteString(L"HCoreLdr: Fetch-Protocol: No-Such-Protocol") .WriteString(L"\r\n"); this->mErrorCode = kNotSupported; @@ -122,13 +119,28 @@ HCore::VoidPtr BFileReader::Fetch(EfiHandlePtr ImageHandle) { mWriter.WriteString(L"HCoreLdr: Fetch-Info: In-Progress...") .WriteString(L"\r\n"); - UInt8* blob = nullptr; + VoidPtr blob = nullptr; mWriter.WriteString(L"HCoreLdr: Fetch-Info: OK...").WriteString(L"\r\n"); - UInt64 sz = info.FileSize; + UInt32* sz = nullptr; - if (BS->AllocatePool(EfiBootServicesData, sz, (VoidPtr*)&blob) != kEfiOk) { + if (BS->AllocatePool(EfiLoaderData, sizeof(UInt32), (VoidPtr*)&sz) != + kEfiOk) { + mWriter + .WriteString( + L"HCoreLdr: Fetch: Failed to call AllocatePool " + L"correctly!") + .WriteString(L"\r\n"); + + kernelFile->Close(kernelFile); + + return nullptr; + } + + *sz = info.FileSize; + + if (BS->AllocatePool(EfiLoaderData, *sz, (VoidPtr*)&blob) != kEfiOk) { mWriter .WriteString( L"HCoreLdr: Fetch: Failed to call AllocatePool " @@ -140,12 +152,12 @@ HCore::VoidPtr BFileReader::Fetch(EfiHandlePtr ImageHandle) { return nullptr; } - BSetMem((CharacterType*)blob, 0, sz); + BSetMem((CharacterType*)blob, 0, *sz); mWriter.WriteString(L"HCoreLdr: Fetch-File: In-Progress...") .WriteString(L"\r\n"); - kernelFile->Read(kernelFile, &sz, blob); + kernelFile->Read(kernelFile, sz, blob); mWriter.WriteString(L"HCoreLdr: Fetch-File: OK").WriteString(L"\r\n"); |
