From a1f5343ec80f8882f23f1a3f6277a5ff18fe1b2b Mon Sep 17 00:00:00 2001 From: Amlal El Mahrouss Date: Mon, 4 Aug 2025 14:13:27 +0100 Subject: fix: PEFCodeMgr: loop over `VMAddress` correctly inside PEF Code Manager. Signed-off-by: Amlal El Mahrouss --- dev/kernel/src/PEFCodeMgr.cc | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) (limited to 'dev/kernel') diff --git a/dev/kernel/src/PEFCodeMgr.cc b/dev/kernel/src/PEFCodeMgr.cc index db24336e..bfd9ff6e 100644 --- a/dev/kernel/src/PEFCodeMgr.cc +++ b/dev/kernel/src/PEFCodeMgr.cc @@ -67,7 +67,7 @@ PEFLoader::PEFLoader(const Char* path) : fCachedBlob(nullptr), fFatBinary(false) constexpr auto kPefHeader = "PEF_CONTAINER"; - /// @note zero here means that the FileMgr will read every container header inside the file. + /// @note zero here means that the FileMgr will read every container header inside the file. fCachedBlob = fFile->Read(kPefHeader, 0UL); PEFContainer* container = reinterpret_cast(fCachedBlob); @@ -166,17 +166,20 @@ ErrorOr PEFLoader::FindSymbol(const Char* name, Int32 kind) { rt_copy_memory_safe((VoidPtr) ((Char*) blob + sizeof(PEFCommandHeader)), container_blob_value, container_header->VMSize, container_header->VMSize); + mm_free_ptr(blob); - kout << "PEFLoader: Information: Loaded stub: " << container_header->Name << "!\r"; + kout << "PEFLoader: info: Loaded stub: " << container_header->Name << "!\r"; - auto ret = HAL::mm_map_page((VoidPtr) container_header->VMAddress, - (VoidPtr) HAL::mm_get_page_addr(container_blob_value), - HAL::kMMFlagsPresent | HAL::kMMFlagsUser); + for (SizeT i_vm{}; i_vm < container_header->VMSize; ++i_vm) { + auto ret = HAL::mm_map_page((VoidPtr) (container_header->VMAddress + i_vm), + (VoidPtr) HAL::mm_get_page_addr(container_blob_value), + HAL::kMMFlagsPresent | HAL::kMMFlagsUser); - if (ret != kErrorSuccess) { - mm_free_ptr(container_blob_value); - return ErrorOr{kErrorInvalidData}; + if (ret != kErrorSuccess) { + delete[] container_blob_value; + return ErrorOr{kErrorInvalidData}; + } } return ErrorOr{container_blob_value}; -- cgit v1.2.3