aboutsummaryrefslogtreecommitdiffstats
path: root/arch/i386/kernel/entry.S
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@g5.osdl.org>2006-09-18 16:20:40 -0700
committerLinus Torvalds <torvalds@g5.osdl.org>2006-09-18 16:20:40 -0700
commit47a5c6fa0e204a2b63309c648bb2fde36836c826 (patch)
tree688b6c12c72fed720dc4a047f310cd292e88a6f1 /arch/i386/kernel/entry.S
parent1d19f176a2884d31c4fe2c7018349ff884a819b1 (diff)
downloadkernel_samsung_espresso10-47a5c6fa0e204a2b63309c648bb2fde36836c826.zip
kernel_samsung_espresso10-47a5c6fa0e204a2b63309c648bb2fde36836c826.tar.gz
kernel_samsung_espresso10-47a5c6fa0e204a2b63309c648bb2fde36836c826.tar.bz2
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/kernel/entry.S')
-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 37a7d2e..87f9f60 100644
--- a/arch/i386/kernel/entry.S
+++ b/arch/i386/kernel/entry.S
@@ -209,6 +209,10 @@ ENTRY(ret_from_fork)
GET_THREAD_INFO(%ebp)
popl %eax
CFI_ADJUST_CFA_OFFSET -4
+ pushl $0x0202 # Reset kernel eflags
+ CFI_ADJUST_CFA_OFFSET 4
+ popfl
+ CFI_ADJUST_CFA_OFFSET -4
jmp syscall_exit
CFI_ENDPROC