From d834b7e0c871c765a5a6d2d4861d4104c418ed6c Mon Sep 17 00:00:00 2001 From: Aiken Harris Date: Tue, 31 Mar 2026 18:59:59 +0200 Subject: [PATCH] Correct kernel stack base calculation for downward growing stacks --- xtoskrnl/ar/amd64/procsup.cc | 7 +++---- xtoskrnl/ar/i686/procsup.cc | 6 +++--- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/xtoskrnl/ar/amd64/procsup.cc b/xtoskrnl/ar/amd64/procsup.cc index 3ef9669..e8f3d40 100644 --- a/xtoskrnl/ar/amd64/procsup.cc +++ b/xtoskrnl/ar/amd64/procsup.cc @@ -159,9 +159,9 @@ AR::ProcSup::InitializeProcessor(IN PVOID ProcessorStructures) Gdt = InitialGdt; Idt = InitialIdt; Tss = &InitialTss; - KernelBootStack = &BootStack; - KernelFaultStack = &FaultStack; - KernelNmiStack = &NmiStack; + KernelBootStack = (PVOID)((ULONG_PTR)&BootStack + KERNEL_STACK_SIZE); + KernelFaultStack = (PVOID)((ULONG_PTR)&FaultStack + KERNEL_STACK_SIZE); + KernelNmiStack = (PVOID)((ULONG_PTR)&NmiStack + KERNEL_STACK_SIZE); ProcessorBlock = &InitialProcessorBlock; } @@ -510,7 +510,6 @@ AR::ProcSup::InitializeTss(IN PKPROCESSOR_BLOCK ProcessorBlock, ProcessorBlock->TssBase->Ist[KIDT_IST_PANIC] = (ULONG_PTR)KernelFaultStack; ProcessorBlock->TssBase->Ist[KIDT_IST_MCA] = (ULONG_PTR)KernelFaultStack; ProcessorBlock->TssBase->Ist[KIDT_IST_NMI] = (ULONG_PTR)KernelNmiStack; - } /** diff --git a/xtoskrnl/ar/i686/procsup.cc b/xtoskrnl/ar/i686/procsup.cc index ba7fdc1..1d1e190 100644 --- a/xtoskrnl/ar/i686/procsup.cc +++ b/xtoskrnl/ar/i686/procsup.cc @@ -154,9 +154,9 @@ AR::ProcSup::InitializeProcessor(IN PVOID ProcessorStructures) Gdt = InitialGdt; Idt = InitialIdt; Tss = &InitialTss; - KernelBootStack = &BootStack; - KernelFaultStack = &FaultStack; - KernelNmiStack = &NmiStack; + KernelBootStack = (PVOID)((ULONG_PTR)&BootStack + KERNEL_STACK_SIZE); + KernelFaultStack = (PVOID)((ULONG_PTR)&FaultStack + KERNEL_STACK_SIZE); + KernelNmiStack = (PVOID)((ULONG_PTR)&NmiStack + KERNEL_STACK_SIZE); ProcessorBlock = &InitialProcessorBlock; }