From 0fed59314751ee4b597205d7449accd70a412c83 Mon Sep 17 00:00:00 2001 From: Aiken Harris Date: Sun, 15 Mar 2026 17:32:01 +0100 Subject: [PATCH] Ensure SS and RSP are saved in trap frame --- xtoskrnl/ar/amd64/archsup.S | 10 +++++++++- xtoskrnl/includes/ar/amd64/asmsup.h | 2 ++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/xtoskrnl/ar/amd64/archsup.S b/xtoskrnl/ar/amd64/archsup.S index d91f8ea..481cd53 100644 --- a/xtoskrnl/ar/amd64/archsup.S +++ b/xtoskrnl/ar/amd64/archsup.S @@ -104,12 +104,20 @@ ArTrap\Vector: /* Test previous mode and swap GS if needed */ movl $0, TrapPreviousMode(%rbp) mov %cs, %ax - and $1, %al + and $3, %al mov %al, TrapPreviousMode(%rbp) jz KernelMode$\Vector swapgs + jmp UserMode$\Vector KernelMode$\Vector: + /* Save kernel stack pointer (SS:RSP) */ + movl %ss, %eax + mov %eax, TrapSegSs(%rbp) + lea TRAP_FRAME_SIZE(%rbp), %rax + mov %rax, TrapRsp(%rbp) + +UserMode$\Vector: /* Push Frame Pointer, clear direction flag and pass to trap dispatcher */ mov %rsp, %rcx cld diff --git a/xtoskrnl/includes/ar/amd64/asmsup.h b/xtoskrnl/includes/ar/amd64/asmsup.h index 7e04ab6..6127077 100644 --- a/xtoskrnl/includes/ar/amd64/asmsup.h +++ b/xtoskrnl/includes/ar/amd64/asmsup.h @@ -56,6 +56,8 @@ #define TrapSegEs 330 #define TrapSegFs 332 #define TrapSegGs 334 +#define TrapRsp 496 +#define TrapSegSs 504 /* KTRAP_FRAME length related definitions */ #define TRAP_FRAME_SIZE 512