summaryrefslogtreecommitdiffhomepage
path: root/Kernel/Source/ThreadLocalStorage.cxx
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlal.elmahrouss@icloud.com>2024-05-09 00:42:44 +0200
committerAmlal El Mahrouss <amlal.elmahrouss@icloud.com>2024-05-09 00:42:44 +0200
commitaf8a516fc22865abd80d6e26f1541fa3d6bebfdc (patch)
tree96d42a10945fc03df022389aef54708383c1d616 /Kernel/Source/ThreadLocalStorage.cxx
parenta874e9cc98df994178d55996943fe81799c61d2f (diff)
MHR-23: :boom:, refactors.
- Move NewBoot to /Boot, thus making Kernel directory only containing the kernel. Signed-off-by: Amlal El Mahrouss <amlal.elmahrouss@icloud.com>
Diffstat (limited to 'Kernel/Source/ThreadLocalStorage.cxx')
-rw-r--r--Kernel/Source/ThreadLocalStorage.cxx58
1 files changed, 58 insertions, 0 deletions
diff --git a/Kernel/Source/ThreadLocalStorage.cxx b/Kernel/Source/ThreadLocalStorage.cxx
new file mode 100644
index 00000000..c31ae1c2
--- /dev/null
+++ b/Kernel/Source/ThreadLocalStorage.cxx
@@ -0,0 +1,58 @@
+/*
+ * ========================================================
+ *
+ * NewOS
+ * Copyright SoftwareLabs, all rights reserved.
+ *
+ * ========================================================
+ */
+
+#include <KernelKit/ProcessScheduler.hpp>
+#include <KernelKit/ThreadLocalStorage.hxx>
+
+///! BUGS: 0
+
+/***********************************************************************************/
+/// @file ThreadLocalStorage.cxx
+/// @brief TLS implementation in kernel.
+/***********************************************************************************/
+
+using namespace NewOS;
+
+/**
+ * @brief Check for cookie inside TIB.
+ * @param tib the TIB to check.
+ * @return if the cookie is enabled.
+ */
+
+Boolean tls_check_tib(ThreadInformationBlock* tib)
+{
+ if (!tib)
+ return false;
+
+ Encoder encoder;
+ const char* tibAsBytes = encoder.AsBytes(tib);
+
+ kcout << "New OS: Checking for a valid cookie...\r";
+
+ return tibAsBytes[0] == kCookieMag0 && tibAsBytes[1] == kCookieMag1 &&
+ tibAsBytes[2] == kCookieMag2;
+}
+
+/**
+ * @brief System call implementation of the TLS check.
+ * @param stackPtr The call frame.
+ * @return
+ */
+EXTERN_C Void tls_check_syscall_impl(NewOS::HAL::StackFramePtr stackPtr) noexcept
+{
+ ThreadInformationBlock* tib = (ThreadInformationBlock*)stackPtr->Gs;
+
+ if (!tls_check_tib(tib))
+ {
+ kcout << "New OS: Verification failed, Crashing...\r";
+ ProcessScheduler::Shared().Leak().GetCurrent().Leak().Crash();
+ }
+
+ kcout << "New OS: Verification succeeded! Keeping on...\r";
+}