i386: Fix possible race condition on first context restore

Make sure that the esp is restored before the eflags register.

When the init task is initially restored, system interrupts are activated when the
eflags register is loaded.
If the esp register still points to an address in the interrupt stack
area (from early system initlization) the ISR might overwrite its own
stack.

Closes #4031
This commit is contained in:
Jan Sommer
2020-07-22 14:41:51 +02:00
committed by Sebastian Huber
parent 4444094d02
commit 21c7e3a41f

View File

@@ -83,9 +83,9 @@ SYM (_CPU_Context_switch):
.L_restore:
movl I386_CONTEXT_CONTROL_ISR_DISPATCH_DISABLE(eax),ecx
movl ecx,PER_CPU_ISR_DISPATCH_DISABLE(edx)
movl REG_ESP(eax),esp /* restore stack pointer */
pushl REG_EFLAGS(eax) /* push eflags */
popf /* restore eflags */
movl REG_ESP(eax),esp /* restore stack pointer */
movl REG_EBP(eax),ebp /* restore base pointer */
movl REG_EBX(eax),ebx /* restore ebx */
movl REG_ESI(eax),esi /* restore source register */