fix: passing intr_ctx to soft_iret corrupts the stack of next proccess when performin...
authorMinep <zelong56@gmail.com>
Thu, 16 Jun 2022 10:20:32 +0000 (11:20 +0100)
committerMinep <zelong56@gmail.com>
Thu, 16 Jun 2022 10:20:32 +0000 (11:20 +0100)
lunaix-os/.gitignore
lunaix-os/kernel/asm/x86/interrupt.S
lunaix-os/kernel/sched.c

index 2b8398e2eb5ccededdd3d2fba00ce90432a2a4c7..0b666f608891ffc23607978a06b54a54543986bb 100644 (file)
@@ -4,3 +4,4 @@ playground/
 .vscode/*.log
 .VSCodeCounter/
 .idea
 .vscode/*.log
 .VSCodeCounter/
 .idea
+bx_enh_dbg.ini
\ No newline at end of file
index e0cda172957dc1e7efc253cd55cc31df224b89b0..a03bce613f3897b5fe65c54d15be68a9e9670453 100644 (file)
 
         call intr_handler
 
 
         call intr_handler
 
+        movl (%esp), %eax
+
     .global soft_iret
     soft_iret:
     .global soft_iret
     soft_iret:
-        popl %esp
+        movl %eax, %esp
 
         popl %eax
         popl %ebx
 
         popl %eax
         popl %ebx
index e7bcd9a6d3fc5fb3a7e8b5577e9592f4ab8f8a1c..8c43b149d3eb761ec094269a765ba9808ca775ea 100644 (file)
@@ -58,9 +58,9 @@ run(struct proc_info* proc)
 
     apic_done_servicing();
 
 
     apic_done_servicing();
 
-    asm volatile("pushl %0\n"
+    asm volatile("movl %0, %%eax\n"
                  "jmp soft_iret\n" ::"r"(&__current->intr_ctx)
                  "jmp soft_iret\n" ::"r"(&__current->intr_ctx)
-                 : "memory");
+                 : "eax", "memory");
 }
 
 void
 }
 
 void