From 620fc24cd2a3decef0aa3a63137a8e61b4e9684c Mon Sep 17 00:00:00 2001 From: Aiken Harris Date: Tue, 31 Mar 2026 20:38:21 +0200 Subject: [PATCH] Fix previous mode detection by reading CS from the trap frame and sanitize segment restoration --- xtoskrnl/ar/amd64/archsup.S | 7 +------ xtoskrnl/includes/ar/amd64/asmsup.h | 1 + 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/xtoskrnl/ar/amd64/archsup.S b/xtoskrnl/ar/amd64/archsup.S index 9a62cf9..d9ce63d 100644 --- a/xtoskrnl/ar/amd64/archsup.S +++ b/xtoskrnl/ar/amd64/archsup.S @@ -112,7 +112,7 @@ Ar\Type\Vector: /* Test previous mode and swap GS if needed */ movl $0, TrapPreviousMode(%rbp) - mov %cs, %ax + mov TrapSegCs(%rbp), %ax and $3, %al mov %al, TrapPreviousMode(%rbp) @@ -174,11 +174,6 @@ KernelModeReturn\Type\Vector: /* Load MxCsr register */ ldmxcsr TrapMxCsr(%rbp) - /* Restore segment selectors */ - mov TrapSegDs(%rbp), %ds - mov TrapSegEs(%rbp), %es - mov TrapSegFs(%rbp), %fs - /* Free stack space */ add $(TRAP_FRAME_SIZE - TRAP_REGISTERS_SIZE), %rsp diff --git a/xtoskrnl/includes/ar/amd64/asmsup.h b/xtoskrnl/includes/ar/amd64/asmsup.h index 6127077..0fa9591 100644 --- a/xtoskrnl/includes/ar/amd64/asmsup.h +++ b/xtoskrnl/includes/ar/amd64/asmsup.h @@ -56,6 +56,7 @@ #define TrapSegEs 330 #define TrapSegFs 332 #define TrapSegGs 334 +#define TrapSegCs 480 #define TrapRsp 496 #define TrapSegSs 504