From c1eaabf97bf0cd24918eaec805ea636dd507fa22 Mon Sep 17 00:00:00 2001 From: Alex Date: Tue, 25 Apr 2023 05:14:12 +0300 Subject: [PATCH] Bug fixes --- .../amd64/DifferentiatedSystemDescriptionTable.cpp | 8 ++++---- Core/Memory/StackGuard.cpp | 2 +- SystemCalls/Native.cpp | 9 +++++++-- SystemCalls/Syscalls.cpp | 1 + 4 files changed, 13 insertions(+), 7 deletions(-) diff --git a/Architecture/amd64/DifferentiatedSystemDescriptionTable.cpp b/Architecture/amd64/DifferentiatedSystemDescriptionTable.cpp index 545fbae..202fb25 100644 --- a/Architecture/amd64/DifferentiatedSystemDescriptionTable.cpp +++ b/Architecture/amd64/DifferentiatedSystemDescriptionTable.cpp @@ -80,10 +80,10 @@ namespace ACPI { if (TaskManager) { - Tasking::PCB *ParentProcess = TaskManager->GetCurrentProcess(); - if (!ParentProcess) - ParentProcess = GetCPU(0)->CurrentProcess.load(); - TaskManager->CreateThread(ParentProcess, (Tasking::IP)KST_Shutdown); + TaskManager->CreateThread(TaskManager->CreateProcess(nullptr, + "Shutdown", + Tasking::TaskTrustLevel::Kernel), + (Tasking::IP)KST_Shutdown); } else KernelShutdownThread(false); diff --git a/Core/Memory/StackGuard.cpp b/Core/Memory/StackGuard.cpp index 0d38ff1..e9ac402 100644 --- a/Core/Memory/StackGuard.cpp +++ b/Core/Memory/StackGuard.cpp @@ -65,7 +65,7 @@ namespace Memory this->Size = STACK_SIZE; } - trace("Allocated stack at %p", this->StackBottom); + debug("Allocated stack at %p", this->StackBottom); } StackGuard::~StackGuard() diff --git a/SystemCalls/Native.cpp b/SystemCalls/Native.cpp index b302651..e8f42ba 100644 --- a/SystemCalls/Native.cpp +++ b/SystemCalls/Native.cpp @@ -113,8 +113,7 @@ static int sys_detach_address(SyscallsFrame *Frame, uintptr_t Address) static uintptr_t sys_kernelctl(SyscallsFrame *Frame, enum KCtl Command, uint64_t Arg1, uint64_t Arg2, uint64_t Arg3, uint64_t Arg4) { - /* Only trusted threads can use kernelctl */ - if (!CheckTrust(TrustedByKernel | Trusted)) + if (!CheckTrust(TrustedByKernel | Trusted | Untrusted)) return SYSCALL_ACCESS_DENIED; switch (Command) @@ -129,6 +128,8 @@ static uintptr_t sys_kernelctl(SyscallsFrame *Frame, enum KCtl Command, uint64_t return TaskManager->GetCurrentThread()->Security.IsCritical; case KCTL_REGISTER_ELF_LIB: { + if (!CheckTrust(TrustedByKernel | Trusted)) + return SYSCALL_ACCESS_DENIED; char *Identifier = (char *)Arg1; const char *Path = (const char *)Arg2; @@ -180,6 +181,8 @@ static uintptr_t sys_kernelctl(SyscallsFrame *Frame, enum KCtl Command, uint64_t } case KCTL_GET_ELF_LIB_FILE: { + if (!CheckTrust(TrustedByKernel | Trusted)) + return SYSCALL_ACCESS_DENIED; char *Identifier = (char *)Arg1; if (!Identifier) return 0; @@ -195,6 +198,8 @@ static uintptr_t sys_kernelctl(SyscallsFrame *Frame, enum KCtl Command, uint64_t } case KCTL_GET_ELF_LIB_MEMORY_IMAGE: { + if (!CheckTrust(TrustedByKernel | Trusted)) + return SYSCALL_ACCESS_DENIED; char *Identifier = (char *)Arg1; if (!Identifier) return 0; diff --git a/SystemCalls/Syscalls.cpp b/SystemCalls/Syscalls.cpp index af6a797..c9740a0 100644 --- a/SystemCalls/Syscalls.cpp +++ b/SystemCalls/Syscalls.cpp @@ -61,4 +61,5 @@ extern "C" uintptr_t SystemCallsHandler(SyscallsFrame *Frame) } } assert(false); /* Should never reach here. */ + return 0; }