Messages in this thread | | | Subject | Re: [PATCH] x86/fpu: Fix invalid FPU ptrace state after execve | From | Dave Hansen <> | Date | Thu, 17 Nov 2016 13:31:57 -0800 |
| |
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(); }
| |