From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755462Ab2DPUsu (ORCPT ); Mon, 16 Apr 2012 16:48:50 -0400 Received: from mx1.redhat.com ([209.132.183.28]:49909 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755031Ab2DPUss (ORCPT ); Mon, 16 Apr 2012 16:48:48 -0400 Date: Mon, 16 Apr 2012 22:48:15 +0200 From: Oleg Nesterov To: Linus Torvalds Cc: "H. Peter Anvin" , Chuck Ebbert , Jan Kratochvil , linux-kernel@vger.kernel.org Subject: [PATCH 1/1] i387: ptrace breaks the lazy-fpu-restore logic Message-ID: <20120416204815.GB24884@redhat.com> References: <20120414235238.GA11131@redhat.com> <20120415223808.GA26214@redhat.com> <20120416204756.GA24884@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20120416204756.GA24884@redhat.com> User-Agent: Mutt/1.5.18 (2008-05-17) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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 Suggested-by: Linus Torvalds Signed-off-by: Oleg Nesterov --- 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; } -- 1.5.5.1