diff options
| author | Amlal El Mahrouss <amlal@el-mahrouss-logic.com> | 2024-03-20 10:17:08 +0100 |
|---|---|---|
| committer | Amlal El Mahrouss <amlal@el-mahrouss-logic.com> | 2024-03-20 10:17:08 +0100 |
| commit | 055a896406af227e03708fa20a728259cace704a (patch) | |
| tree | 3795026ca3ccbb6d0d024394c84d791784153c6e /Private | |
| parent | db81a40a0277c8f571a44c6f97c0ea5c7a81f974 (diff) | |
kernel: secret: fix: see below.
- fix is_valid_ptr and add definition to header file.
- also remove NX flags.
Diffstat (limited to 'Private')
| -rw-r--r-- | Private/NewKit/KernelHeap.hpp | 1 | ||||
| -rw-r--r-- | Private/Source/KernelHeap.cxx | 27 |
2 files changed, 9 insertions, 19 deletions
diff --git a/Private/NewKit/KernelHeap.hpp b/Private/NewKit/KernelHeap.hpp index 6e2e9dbf..489138cd 100644 --- a/Private/NewKit/KernelHeap.hpp +++ b/Private/NewKit/KernelHeap.hpp @@ -15,5 +15,6 @@ namespace HCore { Int32 ke_delete_ke_heap(voidPtr allocatedPtr); +Boolean ke_is_valid_ptr(VoidPtr ptr); voidPtr ke_new_ke_heap(SizeT sz, const bool rw, const bool user); } // namespace HCore diff --git a/Private/Source/KernelHeap.cxx b/Private/Source/KernelHeap.cxx index 3acb3d79..e7dd09ed 100644 --- a/Private/Source/KernelHeap.cxx +++ b/Private/Source/KernelHeap.cxx @@ -95,7 +95,7 @@ Int32 ke_delete_ke_heap(VoidPtr ptr) { if (kPageManager.Free(kLastWrapper)) { virtualAddress->hSizeAddress = 0UL; virtualAddress->hPresent = false; - kLastWrapper->NoExecute(false); + return true; } @@ -114,8 +114,6 @@ Int32 ke_delete_ke_heap(VoidPtr ptr) { virtualAddress->hSizeAddress = 0UL; virtualAddress->hPresent = false; - wrapper->NoExecute(false); - return true; } @@ -127,28 +125,19 @@ Int32 ke_delete_ke_heap(VoidPtr ptr) { return -1; } -/// @brief find pointer in kernel heap +/// @brief Check if pointer is a valid kernel pointer. /// @param ptr the pointer /// @return if it exists. -Boolean kernel_valid_ptr(VoidPtr ptr) { +Boolean ke_is_valid_ptr(VoidPtr ptr) { if (ptr) { - const UIntPtr virtualAddress = reinterpret_cast<UIntPtr>(ptr); + Detail::HeapInformationBlockPtr virtualAddress = + reinterpret_cast<Detail::HeapInformationBlockPtr>(ptr) - + sizeof(Detail::HeapInformationBlock); - if (kLastWrapper && - virtualAddress == (kLastWrapper->VirtualAddress() + - sizeof(Detail::HeapInformationBlock))) { + if (virtualAddress->hPresent && + virtualAddress->hMagic == kHeapMagic) { return true; } - - Ref<PTEWrapper *> wrapper; - - for (SizeT indexWrapper = 0; indexWrapper < kHeapCount; ++indexWrapper) { - if ((kLastWrapper->VirtualAddress() + - sizeof(Detail::HeapInformationBlock)) == virtualAddress) { - wrapper = kWrapperList[indexWrapper]; - return true; - } - } } return false; |
