diff options
author | Linus Torvalds <torvalds@g5.osdl.org> | 2006-09-18 16:20:40 -0700 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-09-18 16:20:40 -0700 |
commit | 47a5c6fa0e204a2b63309c648bb2fde36836c826 (patch) | |
tree | 688b6c12c72fed720dc4a047f310cd292e88a6f1 /arch | |
parent | 1d19f176a2884d31c4fe2c7018349ff884a819b1 (diff) | |
download | linux-3.10-47a5c6fa0e204a2b63309c648bb2fde36836c826.tar.gz linux-3.10-47a5c6fa0e204a2b63309c648bb2fde36836c826.tar.bz2 linux-3.10-47a5c6fa0e204a2b63309c648bb2fde36836c826.zip |
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')
-rw-r--r-- | arch/i386/kernel/entry.S | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/arch/i386/kernel/entry.S b/arch/i386/kernel/entry.S index 37a7d2eaf4a..87f9f60b803 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 |