From 858a67c047e95c6e5fd4e658d2a25e4319e3ab33 Mon Sep 17 00:00:00 2001 From: Alex Date: Sun, 19 Feb 2023 00:24:14 +0200 Subject: [PATCH] Fixed race condition --- KThread.cpp | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/KThread.cpp b/KThread.cpp index 2053955..a0511ce 100644 --- a/KThread.cpp +++ b/KThread.cpp @@ -178,10 +178,6 @@ void KernelMainThread() Execute::SpawnData ret = {Execute::ExStatus::Unknown, nullptr, nullptr}; Tasking::TCB *ExecuteThread = nullptr; int ExitCode = -1; - - Display->Print('.', 0); - Display->SetBuffer(0); - ExecuteThread = TaskManager->CreateThread(TaskManager->GetCurrentProcess(), (Tasking::IP)Execute::StartExecuteService); ExecuteThread->Rename("Library Manager"); ExecuteThread->SetCritical(true); @@ -190,10 +186,12 @@ void KernelMainThread() Display->Print('.', 0); Display->SetBuffer(0); + /* Prevent race conditions */ + CPU::Interrupts(CPU::Disable); + ret = SpawnInit(); Display->Print('.', 0); - Display->Print('\n', 0); Display->SetBuffer(0); if (ret.Status != Execute::ExStatus::OK) @@ -204,6 +202,14 @@ void KernelMainThread() TaskManager->GetSecurityManager()->TrustToken(ret.Process->Security.UniqueToken, Tasking::TTL::FullTrust); TaskManager->GetSecurityManager()->TrustToken(ret.Thread->Security.UniqueToken, Tasking::TTL::FullTrust); ret.Thread->SetCritical(true); + + Display->Print('.', 0); + Display->Print('\n', 0); + Display->SetBuffer(0); + + /* Prevent the init process to execute syscalls without being trusted by the kernel */ + CPU::Interrupts(CPU::Enable); + KPrint("Waiting for \e22AAFF%s\eCCCCCC to start...", Config.InitPath); TaskManager->GetCurrentThread()->SetPriority(Tasking::Idle); TaskManager->WaitForThread(ret.Thread);