On 04/29/2016 03:43 PM, Yu-cheng Yu wrote: > On Fri, Apr 29, 2016 at 01:09:07PM -0700, Dave Hansen wrote: >> On 03/04/2016 10:12 AM, Yu-cheng Yu wrote: >>> +static int may_copy_fpregs_to_sigframe(void) >>> +{ >>> + /* >>> + * In signal handling path, the kernel already checks if >>> + * FPU instructions have been used before it calls >>> + * copy_fpstate_to_sigframe(). We check this here again >>> + * to detect any potential mis-use and saving invalid >>> + * register values directly to a signal frame. >>> + */ >>> + WARN_ONCE(!current->thread.fpu.fpstate_active, >>> + "direct FPU save with no math use\n"); >> >> This is probably an OK check for this _particular_ context (since this >> context is all ready to copy_to_user() the fpu state). But is it good >> generally? Why couldn't you have a !fpstate_active thread that _was_ >> fpregs_active? >> >> Such a thread _could_ do a direct XSAVE with no issues. > > But it won't come to this function unless fpstate_active is ture?
If may_copy_fpregs_to_sigframe() were called from a slightly different context, or if we change the call-site, what breaks? In other words. if we can still "may_copy_fpregs_to_sigframe()" no matter the state of fpu.fpstate_active, then I don't think we should be checking it in may_copy_fpregs_to_sigframe().