From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752693AbcKQVcC (ORCPT ); Thu, 17 Nov 2016 16:32:02 -0500 Received: from mga03.intel.com ([134.134.136.65]:13840 "EHLO mga03.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751986AbcKQVb7 (ORCPT ); Thu, 17 Nov 2016 16:31:59 -0500 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.31,655,1473145200"; d="scan'208";a="902656958" Subject: Re: [PATCH] x86/fpu: Fix invalid FPU ptrace state after execve To: Yu-cheng Yu , linux-kernel@vger.kernel.org, x86@kernel.org, "H. Peter Anvin" , Thomas Gleixner , Ingo Molnar References: <1479315396-2131-1-git-send-email-yu-cheng.yu@intel.com> Cc: Andy Lutomirski , Borislav Petkov , Fenghua Yu , "Ravi V. Shankar" From: Dave Hansen Message-ID: <97ba2918-dbc8-82bf-c017-9837b731f0f1@linux.intel.com> Date: Thu, 17 Nov 2016 13:31:57 -0800 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.4.0 MIME-Version: 1.0 In-Reply-To: <1479315396-2131-1-git-send-email-yu-cheng.yu@intel.com> Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 11/16/2016 08:56 AM, Yu-cheng Yu wrote: > Robert O'Callahan reported that after an execve PTRACE_GETREGSET > NT_X86_XSTATE continues to return the pre-exec register values > until the exec'ed task modifies FPU state. The test code is at > https://bugzilla.redhat.com/attachment.cgi?id=1164286. > > What is happening is when eagerfpu is enabled, fpu__clear() did > not properly clear fpstate. Fix it by doing just that. Functionally, I think the patch is fine. just a few comment/documentation nits. I think fpu__clear()'s comments are a bit out of date. Could we make it clear that it is invalidating both fpregs *and* fpstate? I also think the /* FPU state will be reallocated lazily at the first use. */" comment was fairly valuable. Could we find some way to keep it? The new comment: > + /* > + * When eagerfpu is used, make sure fpstate is cleared and initialized. > + */ also kinda implies that the if() block is only messing with fpstate. Could we make that more clear? Maybe by commenting the individual lines inside the if(): > + if (use_eager_fpu()) { > + fpu__activate_curr(fpu); > + user_fpu_begin(); instead of having it above? Maybe something like: if (use_eager_fpu()) { /* activate and load init fpstate into 'fpu' */ fpu__activate_curr(fpu); /* re-activate fpregs: */ user_fpu_begin(); /* take new init fpstate and place in fpregs: */ copy_init_fpstate_to_fpregs(); }