summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAmlal <amlal@el-mahrouss-logic.com>2024-09-20 08:27:42 +0200
committerAmlal <amlal@el-mahrouss-logic.com>2024-09-20 08:27:42 +0200
commit3614980bbb672780bbaaef54ab8b1fa6a27d932c (patch)
treec4e5434b04e657315d993d50eb99baa43405a005
parent5f4a9440e97d6602222c93e8dcab8c483800a462 (diff)
Patches for kernel, alongside code fixes for user after free and Heap API refactor.
Signed-off-by: Amlal <amlal@el-mahrouss-logic.com>
-rw-r--r--dev/ZBA/BootKit/STB.hxx6
-rw-r--r--dev/ZKA/HALKit/AMD64/HalKernelMain.cxx6
-rw-r--r--dev/ZKA/KernelKit/FileMgr.hxx16
-rw-r--r--dev/ZKA/KernelKit/Heap.hxx20
-rw-r--r--dev/ZKA/Sources/Heap.cxx8
-rw-r--r--dev/ZKA/Sources/NeFS+FileMgr.cxx5
-rw-r--r--dev/ZKA/Sources/New+Delete.cxx10
-rw-r--r--dev/ZKA/Sources/PEFCodeMgr.cxx10
-rw-r--r--dev/ZKA/Sources/UserProcessScheduler.cxx18
-rw-r--r--dev/ZKA/Sources/UserThreadScheduler.cxx2
10 files changed, 52 insertions, 49 deletions
diff --git a/dev/ZBA/BootKit/STB.hxx b/dev/ZBA/BootKit/STB.hxx
index b49bb847..21992e2e 100644
--- a/dev/ZBA/BootKit/STB.hxx
+++ b/dev/ZBA/BootKit/STB.hxx
@@ -17,9 +17,9 @@
#define STBI_ONLY_GIF 1
#define STBI_ASSERT(x) MUST_PASS(x)
-#define STBI_MALLOC(x) Kernel::mm_new_ke_heap(x, true, true)
-#define STBI_REALLOC(p, x) Kernel::mm_realloc_ke_heap(p, x);
-#define STBI_FREE(x) Kernel::mm_delete_ke_heap(x)
+#define STBI_MALLOC(x) Kernel::mm_new_heap(x, true, true)
+#define STBI_REALLOC(p, x) Kernel::mm_realloc_heap(p, x);
+#define STBI_FREE(x) Kernel::mm_delete_heap(x)
#define STB_IMAGE_IMPLEMENTATION 1
#include <KernelKit/Heap.hxx>
diff --git a/dev/ZKA/HALKit/AMD64/HalKernelMain.cxx b/dev/ZKA/HALKit/AMD64/HalKernelMain.cxx
index b11d0701..767cc903 100644
--- a/dev/ZKA/HALKit/AMD64/HalKernelMain.cxx
+++ b/dev/ZKA/HALKit/AMD64/HalKernelMain.cxx
@@ -86,13 +86,9 @@ EXTERN_C Kernel::Void hal_real_init(Kernel::Void) noexcept
if (kHandoverHeader->f_HardwareTables.f_MultiProcessingEnabled)
Kernel::HAL::mp_get_cores(kHandoverHeader->f_HardwareTables.f_VendorPtr);
- Kernel::NeFileSystemMgr* mgr = (Kernel::mm_new_class<Kernel::NeFileSystemMgr>());
+ Kernel::NeFileSystemMgr* mgr = Kernel::mm_new_class<Kernel::NeFileSystemMgr>();
Kernel::NeFileSystemMgr::Mount(mgr);
- /// Do filesystem stuff here... (TODO)
-
- Kernel::mm_delete_class(mgr);
-
mp_do_user_switch();
Kernel::ke_stop(RUNTIME_CHECK_BOOTSTRAP);
diff --git a/dev/ZKA/KernelKit/FileMgr.hxx b/dev/ZKA/KernelKit/FileMgr.hxx
index b569ce36..cd557485 100644
--- a/dev/ZKA/KernelKit/FileMgr.hxx
+++ b/dev/ZKA/KernelKit/FileMgr.hxx
@@ -156,13 +156,13 @@ namespace Kernel
NodePtr CreateSwapFile(const Char* path) override;
public:
- bool Remove(const Char* path) override;
- NodePtr Open(const Char* path, const Char* r) override;
- Void Write(NodePtr node, VoidPtr data, Int32 flags, SizeT sz) override;
- VoidPtr Read(NodePtr node, Int32 flags, SizeT sz) override;
- bool Seek(NodePtr node, SizeT off) override;
- SizeT Tell(NodePtr node) override;
- bool Rewind(NodePtr node) override;
+ bool Remove(_Input const Char* path) override;
+ NodePtr Open(_Input const Char* path, _Input const Char* r) override;
+ Void Write(_Input NodePtr node, _Input VoidPtr data, _Input Int32 flags, _Input SizeT sz) override;
+ VoidPtr Read(_Input NodePtr node, _Input Int32 flags, _Input SizeT sz) override;
+ bool Seek(_Input NodePtr node, _Input SizeT off) override;
+ SizeT Tell(_Input NodePtr node) override;
+ bool Rewind(_Input NodePtr node) override;
Void Write(_Input const Char* name,
_Input NodePtr node,
@@ -415,6 +415,6 @@ namespace Kernel
template <typename Encoding, typename Class>
FileStream<Encoding, Class>::~FileStream()
{
- mm_delete_ke_heap(fFile);
+ mm_delete_heap(fFile);
}
} // namespace Kernel
diff --git a/dev/ZKA/KernelKit/Heap.hxx b/dev/ZKA/KernelKit/Heap.hxx
index 41779146..cb8da37d 100644
--- a/dev/ZKA/KernelKit/Heap.hxx
+++ b/dev/ZKA/KernelKit/Heap.hxx
@@ -18,12 +18,12 @@ namespace Kernel
/// @brief Declare pointer as free.
/// @param heap_ptr the pointer.
/// @return
- Int32 mm_delete_ke_heap(voidPtr heap_ptr);
+ Int32 mm_delete_heap(VoidPtr heap_ptr);
/// @brief Declare a new size for heap_ptr.
/// @param heap_ptr the pointer.
/// @return
- VoidPtr mm_realloc_ke_heap(voidPtr heap_ptr, SizeT new_sz);
+ VoidPtr mm_realloc_heap(VoidPtr heap_ptr, SizeT new_sz);
/// @brief Check if pointer is a valid Kernel pointer.
/// @param heap_ptr the pointer
@@ -35,12 +35,12 @@ namespace Kernel
/// @param rw Read Write bit.
/// @param user User enable bit.
/// @return The newly allocated pointer.
- VoidPtr mm_new_ke_heap(const SizeT sz, const Bool rw, const Bool user);
+ VoidPtr mm_new_heap(const SizeT sz, const Bool rw, const Bool user);
/// @brief Protect the heap with a CRC value.
/// @param heap_ptr pointer.
/// @return if it valid: point has crc now., otherwise fail.
- Boolean mm_protect_ke_heap(VoidPtr heap_ptr);
+ Boolean mm_protect_heap(VoidPtr heap_ptr);
/// @brief Makes a Kernel page.
/// @param heap_ptr the page pointer.
@@ -50,15 +50,21 @@ namespace Kernel
template <typename T, typename... Args>
inline T* mm_new_class(Args&&... args)
{
- T* ptr = new T(move(args)...);
- return ptr;
+ T* cls = (T*)mm_new_heap(sizeof(T), No, No);
+ MUST_PASS(cls);
+
+ *cls = T(move(args)...);
+
+ return cls;
}
template <typename T>
inline Void mm_delete_class(T* cls)
{
cls->~T();
- delete cls;
+ mm_delete_heap((VoidPtr)cls);
+
+ cls = nullptr;
}
} // namespace Kernel
diff --git a/dev/ZKA/Sources/Heap.cxx b/dev/ZKA/Sources/Heap.cxx
index c2894f61..a75eaeb1 100644
--- a/dev/ZKA/Sources/Heap.cxx
+++ b/dev/ZKA/Sources/Heap.cxx
@@ -86,7 +86,7 @@ namespace Kernel
/// @brief Declare a new size for ptr_heap.
/// @param ptr_heap the pointer.
/// @return Newly allocated heap header.
- voidPtr mm_realloc_ke_heap(voidPtr ptr_heap, SizeT new_sz)
+ voidPtr mm_realloc_heap(voidPtr ptr_heap, SizeT new_sz)
{
if (Detail::mm_check_heap_address(ptr_heap) == No)
return nullptr;
@@ -105,7 +105,7 @@ namespace Kernel
/// @param rw Read Write bit.
/// @param user User enable bit.
/// @return The newly allocated pointer.
- VoidPtr mm_new_ke_heap(const SizeT sz, const bool rw, const bool user)
+ VoidPtr mm_new_heap(const SizeT sz, const bool rw, const bool user)
{
Detail::mm_alloc_init_timeout();
@@ -169,7 +169,7 @@ namespace Kernel
/// @brief Declare pointer as free.
/// @param heap_ptr the pointer.
/// @return
- Int32 mm_delete_ke_heap(VoidPtr heap_ptr)
+ Int32 mm_delete_heap(VoidPtr heap_ptr)
{
if (Detail::mm_check_heap_address(heap_ptr) == No)
return -kErrorHeapNotPresent;
@@ -246,7 +246,7 @@ namespace Kernel
/// @brief Protect the heap with a CRC value.
/// @param heap_ptr HIB pointer.
/// @return if it valid: point has crc now., otherwise fail.
- Boolean mm_protect_ke_heap(VoidPtr heap_ptr)
+ Boolean mm_protect_heap(VoidPtr heap_ptr)
{
if (heap_ptr)
{
diff --git a/dev/ZKA/Sources/NeFS+FileMgr.cxx b/dev/ZKA/Sources/NeFS+FileMgr.cxx
index 85630018..fa14aaae 100644
--- a/dev/ZKA/Sources/NeFS+FileMgr.cxx
+++ b/dev/ZKA/Sources/NeFS+FileMgr.cxx
@@ -26,11 +26,12 @@ namespace Kernel
NeFileSystemMgr::~NeFileSystemMgr()
{
- kcout << "Destroying it...\r";
-
if (fImpl)
{
+ kcout << "Destroying FS class (NeFS)...\r";
+
delete fImpl;
+ fImpl = nullptr;
}
}
diff --git a/dev/ZKA/Sources/New+Delete.cxx b/dev/ZKA/Sources/New+Delete.cxx
index b1a3b611..36808a21 100644
--- a/dev/ZKA/Sources/New+Delete.cxx
+++ b/dev/ZKA/Sources/New+Delete.cxx
@@ -12,7 +12,7 @@ void* operator new[](size_t sz)
if (sz == 0)
++sz;
- return Kernel::mm_new_ke_heap(sz, true, false);
+ return Kernel::mm_new_heap(sz, true, false);
}
void* operator new(size_t sz)
@@ -20,7 +20,7 @@ void* operator new(size_t sz)
if (sz == 0)
++sz;
- return Kernel::mm_new_ke_heap(sz, true, false);
+ return Kernel::mm_new_heap(sz, true, false);
}
void operator delete[](void* ptr)
@@ -28,7 +28,7 @@ void operator delete[](void* ptr)
if (ptr == nullptr)
return;
- Kernel::mm_delete_ke_heap(ptr);
+ Kernel::mm_delete_heap(ptr);
}
void operator delete(void* ptr)
@@ -36,7 +36,7 @@ void operator delete(void* ptr)
if (ptr == nullptr)
return;
- Kernel::mm_delete_ke_heap(ptr);
+ Kernel::mm_delete_heap(ptr);
}
void operator delete(void* ptr, size_t sz)
@@ -46,5 +46,5 @@ void operator delete(void* ptr, size_t sz)
ZKA_UNUSED(sz);
- Kernel::mm_delete_ke_heap(ptr);
+ Kernel::mm_delete_heap(ptr);
}
diff --git a/dev/ZKA/Sources/PEFCodeMgr.cxx b/dev/ZKA/Sources/PEFCodeMgr.cxx
index fa9b0d93..80bd9206 100644
--- a/dev/ZKA/Sources/PEFCodeMgr.cxx
+++ b/dev/ZKA/Sources/PEFCodeMgr.cxx
@@ -87,7 +87,7 @@ namespace Kernel
fBad = true;
if (fCachedBlob)
- mm_delete_ke_heap(fCachedBlob);
+ mm_delete_heap(fCachedBlob);
kcout << "CodeMgrPEF: Warning: Executable format error!\r";
fCachedBlob = nullptr;
@@ -97,7 +97,7 @@ namespace Kernel
PEFLoader::~PEFLoader()
{
if (fCachedBlob)
- mm_delete_ke_heap(fCachedBlob);
+ mm_delete_heap(fCachedBlob);
fFile.Delete();
}
@@ -159,7 +159,7 @@ namespace Kernel
{
if (!this->fFatBinary)
{
- mm_delete_ke_heap(blob);
+ mm_delete_heap(blob);
return nullptr;
}
}
@@ -167,14 +167,14 @@ namespace Kernel
Char* blobRet = new Char[container_header->Size];
rt_copy_memory((VoidPtr)((Char*)blob + sizeof(PEFCommandHeader)), blobRet, container_header->Size);
- mm_delete_ke_heap(blob);
+ mm_delete_heap(blob);
return blobRet;
}
}
}
- mm_delete_ke_heap(blob);
+ mm_delete_heap(blob);
return nullptr;
}
diff --git a/dev/ZKA/Sources/UserProcessScheduler.cxx b/dev/ZKA/Sources/UserProcessScheduler.cxx
index 487a2f38..88980f8d 100644
--- a/dev/ZKA/Sources/UserProcessScheduler.cxx
+++ b/dev/ZKA/Sources/UserProcessScheduler.cxx
@@ -91,11 +91,11 @@ namespace Kernel
auto pd = hal_read_cr3();
hal_write_cr3(reinterpret_cast<VoidPtr>(this->MemoryPD));
- auto ptr = mm_new_ke_heap(sz, Yes, Yes);
+ auto ptr = mm_new_heap(sz, Yes, Yes);
hal_write_cr3(reinterpret_cast<VoidPtr>(pd));
#else
- auto ptr = mm_new_ke_heap(sz, Yes, Yes);
+ auto ptr = mm_new_heap(sz, Yes, Yes);
#endif
if (!this->MemoryEntryList)
@@ -144,12 +144,12 @@ namespace Kernel
auto pd = hal_read_cr3();
hal_write_cr3(reinterpret_cast<VoidPtr>(this->MemoryPD));
- Bool ret = mm_delete_ke_heap(ptr);
+ Bool ret = mm_delete_heap(ptr);
hal_write_cr3(reinterpret_cast<VoidPtr>(pd));
return ret;
#else
- bool ret = mm_delete_ke_heap(ptr);
+ bool ret = mm_delete_heap(ptr);
return ret;
#endif
}
@@ -200,10 +200,10 @@ namespace Kernel
//! Delete image if not done already.
if (this->Image && mm_is_valid_heap(this->Image))
- mm_delete_ke_heap(this->Image);
+ mm_delete_heap(this->Image);
if (this->StackFrame && mm_is_valid_heap(this->StackFrame))
- mm_delete_ke_heap((VoidPtr)this->StackFrame);
+ mm_delete_heap((VoidPtr)this->StackFrame);
this->Image = nullptr;
this->StackFrame = nullptr;
@@ -242,7 +242,7 @@ namespace Kernel
process.Status = ProcessStatusKind::kStarting;
- process.StackFrame = (HAL::StackFramePtr)mm_new_ke_heap(sizeof(HAL::StackFrame), Yes, Yes);
+ process.StackFrame = (HAL::StackFramePtr)mm_new_heap(sizeof(HAL::StackFrame), Yes, Yes);
if (!process.StackFrame)
{
@@ -267,11 +267,11 @@ namespace Kernel
// get preferred stack size by app.
const auto cMaxStackSize = process.StackSize;
- process.StackReserve = (UInt8*)mm_new_ke_heap(sizeof(UInt8) * cMaxStackSize, Yes, Yes);
+ process.StackReserve = (UInt8*)mm_new_heap(sizeof(UInt8) * cMaxStackSize, Yes, Yes);
if (!process.StackReserve)
{
- mm_delete_ke_heap(process.StackFrame);
+ mm_delete_heap(process.StackFrame);
process.StackFrame = nullptr;
return -kErrorProcessFault;
}
diff --git a/dev/ZKA/Sources/UserThreadScheduler.cxx b/dev/ZKA/Sources/UserThreadScheduler.cxx
index 21514972..3fc9aee4 100644
--- a/dev/ZKA/Sources/UserThreadScheduler.cxx
+++ b/dev/ZKA/Sources/UserThreadScheduler.cxx
@@ -21,7 +21,7 @@ namespace Kernel
Char fName[cMaxLen] = {"THREAD #0 (PROCESS 0)"};
ProcessStatusKind fThreadStatus;
Int64 fThreadID;
- Int64* fProcessID{nullptr};
+ UserProcessPtr fProcess{nullptr};
VoidPtr fCode{nullptr};
VoidPtr fStack{nullptr};
VoidPtr fData{nullptr};