diff options
| author | Amlal El Mahrouss <amlal@nekernel.org> | 2025-03-25 15:35:28 +0100 |
|---|---|---|
| committer | Amlal El Mahrouss <amlal@nekernel.org> | 2025-03-25 15:35:28 +0100 |
| commit | 0ead895f52d24dad009f738037a7795d4e3d840a (patch) | |
| tree | 863fd1c881fc7bf26ab78b932421e6416bbef288 /dev/kernel/src/UserProcessScheduler.cc | |
| parent | 59dbe4cffc7c633709ef8b45f49c46daf7f74e92 (diff) | |
kernel: Refactor AHCI I/O path, enhance memory allocators, and cleanup obsolete script
- Removed unused `build_gcc.sh` script.
- Namespaced CPU feature flags under `NeOS` and transitioned from enum to unnamed enum for scoping.
- Renamed `drv_std_input_output` to `drv_std_input_output_ahci` for clarity.
- Improved AHCI driver documentation and added zeroing for read buffers.
- Added optional `pad` parameter to memory allocators: `mm_alloc_bitmap`, `mm_new_heap`, `PageMgr::Request`, etc.
- Updated bitmap allocator to correctly handle and align with padded sizes.
- Added `fPad` field to memory header block.
- Fixed `ATA-DMA` mode comment, corrected PRD usage and logic.
- Improved code documentation and formatting in `UserProcessScheduler`, `PageMgr`, and related components.
- Enhanced safety in process memory cleanup (e.g., `StackReserve` cleanup).
Signed-off-by: Amlal El Mahrouss <amlal@nekernel.org>
Diffstat (limited to 'dev/kernel/src/UserProcessScheduler.cc')
| -rw-r--r-- | dev/kernel/src/UserProcessScheduler.cc | 29 |
1 files changed, 17 insertions, 12 deletions
diff --git a/dev/kernel/src/UserProcessScheduler.cc b/dev/kernel/src/UserProcessScheduler.cc index 19861dbe..98abe13c 100644 --- a/dev/kernel/src/UserProcessScheduler.cc +++ b/dev/kernel/src/UserProcessScheduler.cc @@ -111,11 +111,11 @@ namespace NeOS auto vm_register = hal_read_cr3(); hal_write_cr3(this->VMRegister); - auto ptr = mm_new_heap(sz + pad_amount, Yes, Yes); + auto ptr = mm_new_heap(sz, Yes, Yes, pad_amount); hal_write_cr3(vm_register); #else - auto ptr = mm_new_heap(sz + pad_amount, Yes, Yes); + auto ptr = mm_new_heap(sz, Yes, Yes, pad_amount); #endif if (!this->ProcessMemoryHeap) @@ -238,15 +238,23 @@ namespace NeOS if (this->Image.fCode && mm_is_valid_heap(this->Image.fCode)) mm_delete_heap(this->Image.fCode); + //! Delete blob too. if (this->Image.fBlob && mm_is_valid_heap(this->Image.fBlob)) mm_delete_heap(this->Image.fBlob); + //! Delete stack frame. if (this->StackFrame && mm_is_valid_heap(this->StackFrame)) mm_delete_heap((VoidPtr)this->StackFrame); - this->Image.fBlob = nullptr; - this->Image.fCode = nullptr; - this->StackFrame = nullptr; + //! Delete stack reserve. + if (this->StackReserve && mm_is_valid_heap(this->StackReserve)) + mm_delete_heap(reinterpret_cast<VoidPtr>(this->StackReserve)); + + //! Avoid use after free. + this->Image.fBlob = nullptr; + this->Image.fCode = nullptr; + this->StackFrame = nullptr; + this->StackReserve = nullptr; if (this->Kind == kExectuableDylibKind) { @@ -262,10 +270,7 @@ namespace NeOS this->DylibDelegate = nullptr; } - if (this->StackReserve) - mm_delete_heap(reinterpret_cast<VoidPtr>(this->StackReserve)); - - this->ProcessId = 0; + this->ProcessId = 0UL; this->Status = ProcessStatusKind::kFinished; --this->ProcessParentTeam->mProcessCount; @@ -311,7 +316,7 @@ namespace NeOS flags |= HAL::kMMFlagsUser; HAL::mm_map_page((VoidPtr)process.VMRegister, process.VMRegister, flags); -#endif // __NE_VIRTUAL_MEMORY_SUPPORT__ +#endif // ifdef __NE_VIRTUAL_MEMORY_SUPPORT__ process.StackFrame = new HAL::StackFrame(); @@ -327,7 +332,7 @@ namespace NeOS flags |= HAL::kMMFlagsUser; HAL::mm_map_page((VoidPtr)process.StackFrame, process.StackFrame, flags); -#endif // __NE_VIRTUAL_MEMORY_SUPPORT__ +#endif // ifdef __NE_VIRTUAL_MEMORY_SUPPORT__ // React according to process kind. switch (process.Kind) @@ -357,7 +362,7 @@ namespace NeOS flags |= HAL::kMMFlagsUser; HAL::mm_map_page((VoidPtr)process.StackReserve, process.StackReserve, flags); -#endif // __NE_VIRTUAL_MEMORY_SUPPORT__ +#endif // ifdef __NE_VIRTUAL_MEMORY_SUPPORT__ process.ProcessParentTeam = &mTeam; |
