diff options
| author | Amlal El Mahrouss <amlal@nekernel.org> | 2025-06-03 23:14:16 +0200 |
|---|---|---|
| committer | Amlal El Mahrouss <amlal@nekernel.org> | 2025-06-03 23:14:16 +0200 |
| commit | 88a8745e45f525e5fb12b6b048df87afabebbfc9 (patch) | |
| tree | 3e0915b8e797be829a031a86de6d5482429cfd37 /dev/kernel | |
| parent | 422f84949dd3d2e02e70936ee2b6e4741c70a6de (diff) | |
feat: TLS: Improved its implementation, and add a user field for additional checks.
refactor: Reworked `open_msg`'s messaging system.
refactor: Rename `Utils.cc` to `AsciiUtils.cc`
Signed-off-by: Amlal El Mahrouss <amlal@nekernel.org>
Diffstat (limited to 'dev/kernel')
| -rw-r--r-- | dev/kernel/KernelKit/ThreadLocalStorage.h | 4 | ||||
| -rw-r--r-- | dev/kernel/NeKit/Utils.h | 4 | ||||
| -rw-r--r-- | dev/kernel/src/AsciiUtils.cc (renamed from dev/kernel/src/Utils.cc) | 0 | ||||
| -rw-r--r-- | dev/kernel/src/ThreadLocalStorage.cc | 21 |
4 files changed, 11 insertions, 18 deletions
diff --git a/dev/kernel/KernelKit/ThreadLocalStorage.h b/dev/kernel/KernelKit/ThreadLocalStorage.h index 6c764221..35c17db0 100644 --- a/dev/kernel/KernelKit/ThreadLocalStorage.h +++ b/dev/kernel/KernelKit/ThreadLocalStorage.h @@ -27,8 +27,8 @@ struct THREAD_INFORMATION_BLOCK; /// @brief Thread Information Block. /// Located in GS on AMD64, other architectures have their own stuff. (64x0, 32x0, ARM64) struct PACKED THREAD_INFORMATION_BLOCK final { - Kernel::Char Cookie[kTLSCookieLen]{0}; //! Thread magic number. - Kernel::VoidPtr Record{nullptr}; //! Thread information record. + Kernel::Char Cookie[kTLSCookieLen]{0}; //! Thread Magic Number. + Kernel::VoidPtr UserData{nullptr}; //! Thread Information Record (User defined canary structure) }; ///! @brief Cookie Sanity check. diff --git a/dev/kernel/NeKit/Utils.h b/dev/kernel/NeKit/Utils.h index cdfcfe56..43526fc8 100644 --- a/dev/kernel/NeKit/Utils.h +++ b/dev/kernel/NeKit/Utils.h @@ -10,6 +10,8 @@ #include <NeKit/Defines.h> namespace Kernel { +/// ASCII API + Int rt_copy_memory(const voidPtr src, voidPtr dst, Size len); Int rt_move_memory(const voidPtr src, voidPtr dst, Size len); voidPtr rt_set_memory(voidPtr dst, UInt32 val, Size len); @@ -27,6 +29,8 @@ Int rt_to_lower(Int c); voidPtr rt_string_in_string(const Char* in, const Char* needle); char* rt_string_has_char(Char* str, Char chr); +/// UNICODE API + Int urt_string_cmp(const Char* src, const Char* cmp, Size len); Void urt_set_memory(const voidPtr src, UInt32 dst, Size len); Int urt_copy_memory(const voidPtr src, voidPtr dst, Size len); diff --git a/dev/kernel/src/Utils.cc b/dev/kernel/src/AsciiUtils.cc index 087b6d5f..087b6d5f 100644 --- a/dev/kernel/src/Utils.cc +++ b/dev/kernel/src/AsciiUtils.cc diff --git a/dev/kernel/src/ThreadLocalStorage.cc b/dev/kernel/src/ThreadLocalStorage.cc index ec315ddf..88fefee4 100644 --- a/dev/kernel/src/ThreadLocalStorage.cc +++ b/dev/kernel/src/ThreadLocalStorage.cc @@ -15,7 +15,7 @@ /***********************************************************************************/ /// @bugs: 0 /// @file ThreadLocalStorage.cc -/// @brief Process Thread Local Storage. +/// @brief NeKernel Thread Local Storage. /***********************************************************************************/ using namespace Kernel; @@ -27,15 +27,10 @@ using namespace Kernel; */ Boolean tls_check_tib(THREAD_INFORMATION_BLOCK* tib_ptr) { - if (!tib_ptr || !tib_ptr->Record) return false; + if (!tib_ptr) return false; - ICodec encoder; - const Char* tib_as_bytes = encoder.AsBytes<THREAD_INFORMATION_BLOCK*>(tib_ptr); - - kout << "TLS: Validating the TIB...\r"; - - return tib_as_bytes[kCookieMag0Idx] == kCookieMag0 && - tib_as_bytes[kCookieMag1Idx] == kCookieMag1 && tib_as_bytes[kCookieMag2Idx] == kCookieMag2; + return tib_ptr->Cookie[kCookieMag0Idx] == kCookieMag0 && + tib_ptr->Cookie[kCookieMag1Idx] == kCookieMag1 && tib_ptr->Cookie[kCookieMag2Idx] == kCookieMag2; } /** @@ -51,11 +46,5 @@ EXTERN_C Bool tls_check_syscall_impl(Kernel::VoidPtr tib_ptr) noexcept { THREAD_INFORMATION_BLOCK* tib = reinterpret_cast<THREAD_INFORMATION_BLOCK*>(tib_ptr); - if (!tls_check_tib(tib)) { - kout << "TLS: Failed because of an invalid TIB...\r"; - return No; - } - - kout << "TLS Pass.\r"; - return Yes; + return tls_check_tib(tib); } |
