Kernel processes should have IsCritical flag enabled by default

This commit is contained in:
Alex 2023-04-11 11:42:12 +03:00
parent fa4713fdff
commit 69bfc7d9ed
Signed by untrusted user who does not match committer: enderice2
GPG Key ID: EACC3AD603BAB4DD
2 changed files with 12 additions and 2 deletions

View File

@ -818,8 +818,7 @@ namespace CrashHandler
SBIdx = 255; SBIdx = 255;
CHArchTrapFrame *Frame = (CHArchTrapFrame *)Data; CHArchTrapFrame *Frame = (CHArchTrapFrame *)Data;
#if defined(a64) #if defined(a64)
error("-----------------------------------------------------------------------------------"); debug("-----------------------------------------------------------------------------------");
error("An exception occurred!");
error("Exception: %#llx", Frame->InterruptNumber); error("Exception: %#llx", Frame->InterruptNumber);
for (size_t i = 0; i < INT_FRAMES_MAX; i++) for (size_t i = 0; i < INT_FRAMES_MAX; i++)
EHIntFrames[i] = Interrupts::InterruptFrames[i]; EHIntFrames[i] = Interrupts::InterruptFrames[i];
@ -834,6 +833,15 @@ namespace CrashHandler
debug("Exception in kernel mode (ip: %#lx (%s))", debug("Exception in kernel mode (ip: %#lx (%s))",
Frame->rip, KernelSymbolTable ? KernelSymbolTable->GetSymbolFromAddress(Frame->rip) : "No symbol"); Frame->rip, KernelSymbolTable ? KernelSymbolTable->GetSymbolFromAddress(Frame->rip) : "No symbol");
CPUData *data = GetCurrentCPU();
if (data)
{
if (!data->CurrentThread->Security.IsCritical)
{
fixme("Exception in non-critical thread (kernel mode)");
}
}
if (TaskManager) if (TaskManager)
TaskManager->Panic(); TaskManager->Panic();
ForceUnlock = true; ForceUnlock = true;

View File

@ -445,6 +445,7 @@ namespace Tasking
[[fallthrough]]; [[fallthrough]];
case TaskTrustLevel::Kernel: case TaskTrustLevel::Kernel:
{ {
Thread->Security.IsCritical = true;
Thread->Stack = new Memory::StackGuard(false, Parent->PageTable); Thread->Stack = new Memory::StackGuard(false, Parent->PageTable);
#if defined(a64) #if defined(a64)
SecurityManager.TrustToken(Thread->Security.UniqueToken, TTL::TrustedByKernel); SecurityManager.TrustToken(Thread->Security.UniqueToken, TTL::TrustedByKernel);
@ -706,6 +707,7 @@ namespace Tasking
[[fallthrough]]; [[fallthrough]];
case TaskTrustLevel::Kernel: case TaskTrustLevel::Kernel:
{ {
Process->Security.IsCritical = true;
SecurityManager.TrustToken(Process->Security.UniqueToken, TTL::TrustedByKernel); SecurityManager.TrustToken(Process->Security.UniqueToken, TTL::TrustedByKernel);
#if defined(a64) #if defined(a64)
if (!DoNotCreatePageTable) if (!DoNotCreatePageTable)