diff options
| author | Amlal El Mahrouss <amlal@nekernel.org> | 2026-02-27 12:56:40 +0100 |
|---|---|---|
| committer | Amlal El Mahrouss <amlal@nekernel.org> | 2026-02-27 12:56:40 +0100 |
| commit | 0ca3a9f2453e3d9a9b4d96d3eb3b55e416939f30 (patch) | |
| tree | 52c8583e3114caddc6fb149710b0e6607547921f /src/kernel | |
| parent | 92e86a036219d31c56d12ba41adab51d62a26ecc (diff) | |
chore: kernel: FilesystemMgr additions and codebase hardening.
Signed-off-by: Amlal El Mahrouss <amlal@nekernel.org>
Diffstat (limited to 'src/kernel')
| -rw-r--r-- | src/kernel/src/ACPIFactoryInterface.cpp | 6 | ||||
| -rw-r--r-- | src/kernel/src/FS/Ext2+IFS.cpp | 4 | ||||
| -rw-r--r-- | src/kernel/src/FS/NeFS+FileMgr.cpp | 11 | ||||
| -rw-r--r-- | src/kernel/src/FS/OpenHeFS+FileMgr.cpp | 28 | ||||
| -rw-r--r-- | src/kernel/src/FS/OpenHeFS+FileSystemParser.cpp | 4 | ||||
| -rw-r--r-- | src/kernel/src/HeapMgr.cpp | 6 | ||||
| -rw-r--r-- | src/kernel/src/Swap/DiskSwap.cpp | 2 |
7 files changed, 45 insertions, 16 deletions
diff --git a/src/kernel/src/ACPIFactoryInterface.cpp b/src/kernel/src/ACPIFactoryInterface.cpp index 0b5ad18e..4d3e526d 100644 --- a/src/kernel/src/ACPIFactoryInterface.cpp +++ b/src/kernel/src/ACPIFactoryInterface.cpp @@ -1,4 +1,4 @@ -// Copyright 2024-2025, Amlal El Mahrouss (amlal@nekernel.org) +// Copyright 2024-2026, Amlal El Mahrouss (amlal@nekernel.org) // Licensed under the Apache License, Version 2.0 (see LICENSE file) // Official repository: https://github.com/nekernel-org/nekernel @@ -20,10 +20,12 @@ ErrorOr<voidPtr> ACPIFactoryInterface::Find(const Char* signature) { RSDP* rsp_ptr = reinterpret_cast<RSDP*>(this->fRsdp); - if (rsp_ptr->Revision < kMinACPIVer) return ErrorOr<voidPtr>{-kErrorInvalidData}; + if (!rsp_ptr || rsp_ptr->Revision < kMinACPIVer) return ErrorOr<voidPtr>{-kErrorInvalidData}; RSDT* xsdt = reinterpret_cast<RSDT*>(rsp_ptr->RsdtAddress); + if (!xsdt) return ErrorOr<voidPtr>{-kErrorInvalidData}; + Int64 num = (xsdt->Length - sizeof(SDT)) / sizeof(Int64); /*** diff --git a/src/kernel/src/FS/Ext2+IFS.cpp b/src/kernel/src/FS/Ext2+IFS.cpp index 3c724de5..17b23abb 100644 --- a/src/kernel/src/FS/Ext2+IFS.cpp +++ b/src/kernel/src/FS/Ext2+IFS.cpp @@ -1,4 +1,4 @@ -// Copyright 2024-2025, Amlal El Mahrouss (amlal@nekernel.org) +// Copyright 2024-2026, Amlal El Mahrouss (amlal@nekernel.org) // Licensed under the Apache License, Version 2.0 (see LICENSE file) // Official repository: https://github.com/nekernel-org/nekernel @@ -15,6 +15,8 @@ #include <NeKit/KernelPanic.h> #include <NeKit/Utils.h> +/// @note There's no current maintainer of Ext2, the position is vacant. + constexpr static UInt32 EXT2_DIRECT_BLOCKS = 12; constexpr static UInt32 EXT2_SINGLE_INDIRECT_INDEX = 12; constexpr static UInt32 EXT2_DOUBLE_INDIRECT_INDEX = 13; diff --git a/src/kernel/src/FS/NeFS+FileMgr.cpp b/src/kernel/src/FS/NeFS+FileMgr.cpp index b351c65e..2a14ba57 100644 --- a/src/kernel/src/FS/NeFS+FileMgr.cpp +++ b/src/kernel/src/FS/NeFS+FileMgr.cpp @@ -19,12 +19,12 @@ NeFileSystemMgr::NeFileSystemMgr() { mParser = new NeFileSystemParser(); MUST_PASS(mParser); - kout << "We are done allocating NeFileSystemParser...\n"; + kout << "NeFS: Allocated NeFileSystemParser...\n"; } NeFileSystemMgr::~NeFileSystemMgr() { if (mParser) { - kout << "Destroying NeFileSystemParser...\n"; + kout << "NeFS: Destroying NeFileSystemParser...\n"; delete mParser; mParser = nullptr; } @@ -247,7 +247,11 @@ _Output NeFileSystemParser* NeFileSystemMgr::GetParser() { static inline bool is_valid_nefs_catalog(NodePtr node) { if (!node) return false; + auto cat = reinterpret_cast<NEFS_CATALOG_STRUCT*>(node); + + if (cat->ForkOrCatalog) return false; + switch (cat->Kind) { case kNeFSCatalogKindFile: case kNeFSCatalogKindDir: @@ -257,13 +261,16 @@ static inline bool is_valid_nefs_catalog(NodePtr node) { default: return false; } + bool null_found = false; + for (int i = 0; i < kNeFSCatalogNameLen; ++i) { if (cat->Name[i] == 0) { null_found = true; break; } } + if (!null_found) return false; return true; } diff --git a/src/kernel/src/FS/OpenHeFS+FileMgr.cpp b/src/kernel/src/FS/OpenHeFS+FileMgr.cpp index 3300759f..3161ec8c 100644 --- a/src/kernel/src/FS/OpenHeFS+FileMgr.cpp +++ b/src/kernel/src/FS/OpenHeFS+FileMgr.cpp @@ -1,4 +1,4 @@ -// Copyright 2024-2025, Amlal El Mahrouss (amlal@nekernel.org) +// Copyright 2024-2026, Amlal El Mahrouss (amlal@nekernel.org) // Licensed under the Apache License, Version 2.0 (see LICENSE file) // Official repository: https://github.com/nekernel-org/nekernel @@ -17,12 +17,13 @@ HeFileSystemMgr::HeFileSystemMgr() { mParser = new HeFileSystemParser(); MUST_PASS(mParser); - kout << "We are done allocating HeFileSystemParser...\r"; + kout << "OpenHeFS: Allocated HeFileSystemParser...\r"; } HeFileSystemMgr::~HeFileSystemMgr() { if (mParser) { - kout << "Destroying HeFileSystemParser...\r"; + kout << "OpenHeFS: Destroying HeFileSystemParser...\r"; + delete mParser; mParser = nullptr; } @@ -37,7 +38,16 @@ bool HeFileSystemMgr::Remove(_Input const Char* path) { return NO; } - return YES; + auto len = oe_string_len<Char>(path); + + if (len == 0) return NO; + + Utf8Char* out = static_cast<Utf8Char*>(RTL_ALLOCA(sizeof(Utf8Char) * len)); + + err_local_get() = kErrorSuccess; + + bool ret = mParser->DeleteINode(&mDriveTrait, 0, nullptr, out, 0); + return ret; } /// @brief Creates a node with the specified. @@ -52,6 +62,8 @@ NodePtr HeFileSystemMgr::Create(_Input const Char* path) { // TODO: It needs its own helper! SizeT len = oe_string_len<Char>(path); + if (len == 0) return nullptr; + Utf8Char* out = static_cast<Utf8Char*>(RTL_ALLOCA(sizeof(Utf8Char) * len)); for (SizeT indx = 0UL; indx < len; ++indx) { @@ -66,8 +78,8 @@ NodePtr HeFileSystemMgr::Create(_Input const Char* path) { kout << "OpenHeFS: ERROR: Check KPC.\r"; - err_local_get() = kErrorDiskIsFull; - + err_local_get() = kErrorDiskIsFull; + return nullptr; } @@ -83,6 +95,8 @@ NodePtr HeFileSystemMgr::CreateDirectory(const Char* path) { // TODO: It needs its own helper! SizeT len = oe_string_len<Char>(path); + if (len == 0) return nullptr; + Utf8Char* out = static_cast<Utf8Char*>(RTL_ALLOCA(sizeof(Utf8Char) * len)); for (SizeT indx = 0UL; indx < len; ++indx) { @@ -114,6 +128,8 @@ NodePtr HeFileSystemMgr::CreateAlias(const Char* path) { // TODO: It needs its own helper! SizeT len = oe_string_len<Char>(path); + if (len == 0) return nullptr; + Utf8Char* out = static_cast<Utf8Char*>(RTL_ALLOCA(sizeof(Utf8Char) * len)); for (SizeT indx = 0UL; indx < len; ++indx) { diff --git a/src/kernel/src/FS/OpenHeFS+FileSystemParser.cpp b/src/kernel/src/FS/OpenHeFS+FileSystemParser.cpp index d51a95d2..721484d4 100644 --- a/src/kernel/src/FS/OpenHeFS+FileSystemParser.cpp +++ b/src/kernel/src/FS/OpenHeFS+FileSystemParser.cpp @@ -1,4 +1,4 @@ -// Copyright 2024-2025, Amlal El Mahrouss (amlal@nekernel.org) +// Copyright 2024-2026, Amlal El Mahrouss (amlal@nekernel.org) // Licensed under the Apache License, Version 2.0 (see LICENSE file) // Official repository: https://github.com/nekernel-org/nekernel @@ -326,7 +326,7 @@ namespace Detail { if (tmpend->fChecksum != ke_calculate_crc32((Char*) tmpend, sizeof(HEFS_INDEX_NODE_DIRECTORY))) - ke_panic(RUNTIME_CHECK_FILESYSTEM, "Bad CRC32 value, aborting."); + ke_panic(RUNTIME_CHECK_FILESYSTEM, "OpenHeFS: Bad CRC32 value aborting."); if (delete_or_create) --tmpend->fEntryCount; diff --git a/src/kernel/src/HeapMgr.cpp b/src/kernel/src/HeapMgr.cpp index ef25abb7..5093eea2 100644 --- a/src/kernel/src/HeapMgr.cpp +++ b/src/kernel/src/HeapMgr.cpp @@ -1,4 +1,4 @@ -// Copyright 2024-2025, Amlal El Mahrouss (amlal@nekernel.org) +// Copyright 2024-2026, Amlal El Mahrouss (amlal@nekernel.org) // Licensed under the Apache License, Version 2.0 (see LICENSE file) // Official repository: https://github.com/nekernel-org/nekernel @@ -20,13 +20,14 @@ ======================================== */ -//! @file HeapMgr.cc +//! @file HeapMgr.cpp //! @brief Heap system that serves as the main memory manager. #define kHeapMgrMagic (0xD4D75) #define kHeapMgrAlignSz (4U) namespace Kernel { + /// @brief Implementation details. namespace Detail { struct PACKED MM_INFORMATION_BLOCK; @@ -257,4 +258,5 @@ _Output Boolean mm_protect_ptr(VoidPtr heap_ptr) { return No; } + } // namespace Kernel diff --git a/src/kernel/src/Swap/DiskSwap.cpp b/src/kernel/src/Swap/DiskSwap.cpp index 7a926dc5..2b45ae92 100644 --- a/src/kernel/src/Swap/DiskSwap.cpp +++ b/src/kernel/src/Swap/DiskSwap.cpp @@ -1,4 +1,4 @@ -// Copyright 2024-2025, Amlal El Mahrouss (amlal@nekernel.org) +// Copyright 2024-2026, Amlal El Mahrouss (amlal@nekernel.org) // Licensed under the Apache License, Version 2.0 (see LICENSE file) // Official repository: https://github.com/nekernel-org/nekernel |
