[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <tip-089f9fba56faf33cc6dd2a6442b7ac92c58b8209@git.kernel.org>
Date: Mon, 16 Apr 2012 17:05:11 -0700
From: tip-bot for Oleg Nesterov <oleg@...hat.com>
To: linux-tip-commits@...r.kernel.org
Cc: linux-kernel@...r.kernel.org, hpa@...or.com, mingo@...nel.org,
torvalds@...ux-foundation.org, jan.kratochvil@...hat.com,
tglx@...utronix.de, oleg@...hat.com, hpa@...ux.intel.com
Subject: [tip:x86/urgent] i387: ptrace breaks the lazy-fpu-restore logic
Commit-ID: 089f9fba56faf33cc6dd2a6442b7ac92c58b8209
Gitweb: http://git.kernel.org/tip/089f9fba56faf33cc6dd2a6442b7ac92c58b8209
Author: Oleg Nesterov <oleg@...hat.com>
AuthorDate: Mon, 16 Apr 2012 22:48:15 +0200
Committer: H. Peter Anvin <hpa@...ux.intel.com>
CommitDate: Mon, 16 Apr 2012 16:23:59 -0700
i387: ptrace breaks the lazy-fpu-restore logic
Starting from 7e16838d "i387: support lazy restore of FPU state"
we assume that fpu_owner_task doesn't need restore_fpu_checking()
on the context switch, its FPU state should match what we already
have in the FPU on this CPU.
However, debugger can change the tracee's FPU state, in this case
we should reset fpu.last_cpu to ensure fpu_lazy_restore() can't
return true.
Change init_fpu() to do this, it is called by user_regset->set()
methods.
Reported-by: Jan Kratochvil <jan.kratochvil@...hat.com>
Suggested-by: Linus Torvalds <torvalds@...ux-foundation.org>
Signed-off-by: Oleg Nesterov <oleg@...hat.com>
Link: http://lkml.kernel.org/r/20120416204815.GB24884@redhat.com
Cc: <stable@...r.kernel.org> v3.3
Signed-off-by: H. Peter Anvin <hpa@...ux.intel.com>
---
arch/x86/kernel/i387.c | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)
diff --git a/arch/x86/kernel/i387.c b/arch/x86/kernel/i387.c
index 7734bcb..2d6e649 100644
--- a/arch/x86/kernel/i387.c
+++ b/arch/x86/kernel/i387.c
@@ -235,6 +235,7 @@ int init_fpu(struct task_struct *tsk)
if (tsk_used_math(tsk)) {
if (HAVE_HWFP && tsk == current)
unlazy_fpu(tsk);
+ tsk->thread.fpu.last_cpu = ~0;
return 0;
}
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists