fix(kernel): crash on ACPI shutdown/reboot

The deletion of DriverManager invalidates "DriverManager->GlobalKeyboardInputReports" which results in a crash if other processes are waiting for keyboard input.

Signed-off-by: EnderIce2 <enderice2@protonmail.com>
This commit is contained in:
EnderIce2 2025-03-06 13:38:42 +00:00
parent 793ccfd5ba
commit b4cc1d9e66
No known key found for this signature in database
GPG Key ID: 2EE20AF089811A5A
2 changed files with 5 additions and 9 deletions

View File

@ -187,6 +187,8 @@ namespace Driver
void FreeMemory(dev_t DriverID, void *Pointer, size_t Pages); void FreeMemory(dev_t DriverID, void *Pointer, size_t Pages);
Manager(); Manager();
private:
~Manager(); ~Manager();
}; };

View File

@ -344,16 +344,10 @@ EXTERNC __no_stack_protector NIF void Entry(BootInfo *Info)
uintptr_t KernelStack = (uintptr_t)KernelStackAddress + STACK_SIZE - 0x10; uintptr_t KernelStack = (uintptr_t)KernelStackAddress + STACK_SIZE - 0x10;
debug("Kernel stack: %#lx-%#lx", KernelStackAddress, KernelStack); debug("Kernel stack: %#lx-%#lx", KernelStackAddress, KernelStack);
#if defined(__amd64__) #if defined(__amd64__)
asmv("mov %0, %%rsp" asmv("mov %0, %%rsp" : : "r"(KernelStack) : "memory");
:
: "r"(KernelStack)
: "memory");
asmv("mov $0, %rbp"); asmv("mov $0, %rbp");
#elif defined(__i386__) #elif defined(__i386__)
asmv("mov %0, %%esp" asmv("mov %0, %%esp" : : "r"(KernelStack) : "memory");
:
: "r"(KernelStack)
: "memory");
asmv("mov $0, %ebp"); asmv("mov $0, %ebp");
#else #else
#warning "Kernel stack is not set!" #warning "Kernel stack is not set!"
@ -391,7 +385,7 @@ EXTERNC __no_stack_protector void BeforeShutdown(bool Reboot)
KPrint("Unloading all drivers"); KPrint("Unloading all drivers");
if (DriverManager) if (DriverManager)
delete DriverManager, DriverManager = nullptr; DriverManager->UnloadAllDrivers();
KPrint("Stopping scheduling"); KPrint("Stopping scheduling");
if (TaskManager && !TaskManager->IsPanic()) if (TaskManager && !TaskManager->IsPanic())