From 72bc0fabc1427dd75fdde6e324107dea6c8a7ef4 Mon Sep 17 00:00:00 2001 From: Matheus Date: Fri, 9 Sep 2022 18:13:45 -0300 Subject: [PATCH] x86_64 context: fix gs not being swapped properly --- src/arch/x86_64/context.asm | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/src/arch/x86_64/context.asm b/src/arch/x86_64/context.asm index 67d3d45a..711cd27d 100644 --- a/src/arch/x86_64/context.asm +++ b/src/arch/x86_64/context.asm @@ -3,19 +3,11 @@ arch_switchcontext: mov rsp,rdi add rsp, 24 ; cr2 gs fs - mov rbx,es pop rax - cmp rax,rbx - jne .segswap - add rsp,8 ; ds - jmp .genreg - .segswap: - swapgs - mov es,rax + mov es,rax pop rax - mov ds,rax + mov ds,rax - .genreg: pop rax pop rbx pop rcx @@ -33,4 +25,11 @@ arch_switchcontext: pop rbp add rsp,8 ; remove error code + cmp qword [rsp+8], 0x3b ; user cs + jne .noswap + + swapgs + + .noswap: + iretq