summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlal@el-mahrouss-logic.com>2024-03-20 10:17:08 +0100
committerAmlal El Mahrouss <amlal@el-mahrouss-logic.com>2024-03-20 10:17:08 +0100
commit055a896406af227e03708fa20a728259cace704a (patch)
tree3795026ca3ccbb6d0d024394c84d791784153c6e
parentdb81a40a0277c8f571a44c6f97c0ea5c7a81f974 (diff)
kernel: secret: fix: see below.
- fix is_valid_ptr and add definition to header file. - also remove NX flags.
-rw-r--r--Private/NewKit/KernelHeap.hpp1
-rw-r--r--Private/Source/KernelHeap.cxx27
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;