aboutsummaryrefslogtreecommitdiffstats
path: root/arch/i386
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@g5.osdl.org>2006-09-18 19:20:40 -0400
committerLinus Torvalds <torvalds@g5.osdl.org>2006-09-18 19:20:40 -0400
commit47a5c6fa0e204a2b63309c648bb2fde36836c826 (patch)
tree688b6c12c72fed720dc4a047f310cd292e88a6f1 /arch/i386
parent1d19f176a2884d31c4fe2c7018349ff884a819b1 (diff)
x86: save/restore eflags in context switch
(And reset it on new thread creation) It turns out that eflags is important to save and restore not just because of iopl, but due to the magic bits like the NT bit, which we don't want leaking between different threads. Tested-by: Mike Galbraith <efault@gmx.de> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'arch/i386')
-rw-r--r--arch/i386/kernel/entry.S4
1 files changed, 4 insertions, 0 deletions
diff --git a/arch/i386/kernel/entry.S b/arch/i386/kernel/entry.S
index 37a7d2eaf4a0..87f9f60b803b 100644
--- a/arch/i386/kernel/entry.S
+++ b/arch/i386/kernel/entry.S
@@ -209,6 +209,10 @@ ENTRY(ret_from_fork)
209 GET_THREAD_INFO(%ebp) 209 GET_THREAD_INFO(%ebp)
210 popl %eax 210 popl %eax
211 CFI_ADJUST_CFA_OFFSET -4 211 CFI_ADJUST_CFA_OFFSET -4
212 pushl $0x0202 # Reset kernel eflags
213 CFI_ADJUST_CFA_OFFSET 4
214 popfl
215 CFI_ADJUST_CFA_OFFSET -4
212 jmp syscall_exit 216 jmp syscall_exit
213 CFI_ENDPROC 217 CFI_ENDPROC
214 218