summaryrefslogtreecommitdiffhomepage
path: root/dev/kernel/src
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlal@nekernel.org>2025-08-04 14:13:27 +0100
committerAmlal El Mahrouss <amlal@nekernel.org>2025-08-04 14:13:27 +0100
commita1f5343ec80f8882f23f1a3f6277a5ff18fe1b2b (patch)
treeb5729cea3039e923b592f810b235ae02414a03ad /dev/kernel/src
parent6a0559351257bbf328b37e4b14d24f772878d45d (diff)
fix: PEFCodeMgr: loop over `VMAddress` correctly inside PEF Code Manager.
Signed-off-by: Amlal El Mahrouss <amlal@nekernel.org>
Diffstat (limited to 'dev/kernel/src')
-rw-r--r--dev/kernel/src/PEFCodeMgr.cc19
1 files changed, 11 insertions, 8 deletions
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<PEFContainer*>(fCachedBlob);
@@ -166,17 +166,20 @@ ErrorOr<VoidPtr> 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<VoidPtr>{kErrorInvalidData};
+ if (ret != kErrorSuccess) {
+ delete[] container_blob_value;
+ return ErrorOr<VoidPtr>{kErrorInvalidData};
+ }
}
return ErrorOr<VoidPtr>{container_blob_value};