From 585e021c7f3e89af08aa10215649575f6b1fd14e Mon Sep 17 00:00:00 2001 From: Bananymous Date: Mon, 25 May 2026 02:19:56 +0300 Subject: [PATCH] Kernel: Don't panic when stack trace leads to GPF if there is was a uncanonical address in stack trace we ended up in an infinite recursive loop trying to print stack trace --- kernel/kernel/IDT.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/kernel/kernel/IDT.cpp b/kernel/kernel/IDT.cpp index b8fb6795..f9fe2480 100644 --- a/kernel/kernel/IDT.cpp +++ b/kernel/kernel/IDT.cpp @@ -256,6 +256,18 @@ namespace Kernel break; } + case ISR::GeneralProtectionFault: + { + const uint8_t* ip = reinterpret_cast(interrupt_stack->ip); + for (const auto& safe_user : s_safe_user_page_faults) + { + if (ip < safe_user.ip_start || ip >= safe_user.ip_end) + continue; + interrupt_stack->ip = reinterpret_cast(safe_user.ip_fault); + return; + } + break; + } case ISR::DeviceNotAvailable: { if (pid == 0 || !Thread::current().is_userspace())