From d00577ac8da0ebf1bd181a769e343724f9ea9c4e Mon Sep 17 00:00:00 2001 From: Aiken Harris Date: Tue, 31 Mar 2026 23:10:45 +0200 Subject: [PATCH] Fix previous mode detection by reading CS from the trap frame --- xtoskrnl/ar/i686/archsup.S | 2 +- xtoskrnl/includes/ar/i686/asmsup.h | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/xtoskrnl/ar/i686/archsup.S b/xtoskrnl/ar/i686/archsup.S index 1dcbceb..dcd8817 100644 --- a/xtoskrnl/ar/i686/archsup.S +++ b/xtoskrnl/ar/i686/archsup.S @@ -111,7 +111,7 @@ _Ar\Type\Vector\()Start: /* Test previous mode and swap GS if needed */ movl $0, TrapPreviousMode(%ebp) - mov %cs, %ax + mov TrapSegCs(%ebp), %ax and $3, %al mov %al, TrapPreviousMode(%ebp) jz KernelMode\Type\Vector diff --git a/xtoskrnl/includes/ar/i686/asmsup.h b/xtoskrnl/includes/ar/i686/asmsup.h index 1593bc8..6b228f2 100644 --- a/xtoskrnl/includes/ar/i686/asmsup.h +++ b/xtoskrnl/includes/ar/i686/asmsup.h @@ -25,6 +25,7 @@ #define TrapSegFs 40 #define TrapSegGs 42 #define TrapVector 72 +#define TrapSegCs 84 #define TrapEsp 92 #define TrapSegSs 96