From 3614980bbb672780bbaaef54ab8b1fa6a27d932c Mon Sep 17 00:00:00 2001 From: Amlal Date: Fri, 20 Sep 2024 08:27:42 +0200 Subject: Patches for kernel, alongside code fixes for user after free and Heap API refactor. Signed-off-by: Amlal --- dev/ZBA/BootKit/STB.hxx | 6 +++--- dev/ZKA/HALKit/AMD64/HalKernelMain.cxx | 6 +----- dev/ZKA/KernelKit/FileMgr.hxx | 16 ++++++++-------- dev/ZKA/KernelKit/Heap.hxx | 20 +++++++++++++------- dev/ZKA/Sources/Heap.cxx | 8 ++++---- dev/ZKA/Sources/NeFS+FileMgr.cxx | 5 +++-- dev/ZKA/Sources/New+Delete.cxx | 10 +++++----- dev/ZKA/Sources/PEFCodeMgr.cxx | 10 +++++----- dev/ZKA/Sources/UserProcessScheduler.cxx | 18 +++++++++--------- dev/ZKA/Sources/UserThreadScheduler.cxx | 2 +- 10 files changed, 52 insertions(+), 49 deletions(-) (limited to 'dev') 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 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* mgr = Kernel::mm_new_class(); 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 FileStream::~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 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 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(this->MemoryPD)); - auto ptr = mm_new_ke_heap(sz, Yes, Yes); + auto ptr = mm_new_heap(sz, Yes, Yes); hal_write_cr3(reinterpret_cast(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(this->MemoryPD)); - Bool ret = mm_delete_ke_heap(ptr); + Bool ret = mm_delete_heap(ptr); hal_write_cr3(reinterpret_cast(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}; -- cgit v1.2.3