From efbabf3bcf37c1da148c1e7579974999021f2b86 Mon Sep 17 00:00:00 2001 From: Minep Date: Thu, 16 Jun 2022 11:20:32 +0100 Subject: [PATCH] fix: passing intr_ctx to soft_iret corrupts the stack of next proccess when performing context switching. --- lunaix-os/.gitignore | 1 + lunaix-os/kernel/asm/x86/interrupt.S | 4 +++- lunaix-os/kernel/sched.c | 4 ++-- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/lunaix-os/.gitignore b/lunaix-os/.gitignore index 2b8398e..0b666f6 100644 --- a/lunaix-os/.gitignore +++ b/lunaix-os/.gitignore @@ -4,3 +4,4 @@ playground/ .vscode/*.log .VSCodeCounter/ .idea +bx_enh_dbg.ini \ No newline at end of file diff --git a/lunaix-os/kernel/asm/x86/interrupt.S b/lunaix-os/kernel/asm/x86/interrupt.S index e0cda17..a03bce6 100644 --- a/lunaix-os/kernel/asm/x86/interrupt.S +++ b/lunaix-os/kernel/asm/x86/interrupt.S @@ -96,9 +96,11 @@ call intr_handler + movl (%esp), %eax + .global soft_iret soft_iret: - popl %esp + movl %eax, %esp popl %eax popl %ebx diff --git a/lunaix-os/kernel/sched.c b/lunaix-os/kernel/sched.c index e7bcd9a..8c43b14 100644 --- a/lunaix-os/kernel/sched.c +++ b/lunaix-os/kernel/sched.c @@ -58,9 +58,9 @@ run(struct proc_info* proc) apic_done_servicing(); - asm volatile("pushl %0\n" + asm volatile("movl %0, %%eax\n" "jmp soft_iret\n" ::"r"(&__current->intr_ctx) - : "memory"); + : "eax", "memory"); } void -- 2.27.0