On 11/30, Peter Zijlstra wrote: > > On Mon, Nov 30, 2015 at 04:44:05PM +0000, Al Viro wrote: > > On Mon, Nov 30, 2015 at 11:20:44AM -0500, Sasha Levin wrote: > > > Hi all, > > > > > > I've hit the following while fuzzing with trinity on the latest -next > > > kernel: > > > > __set_current_state(TASK_INTERRUPTIBLE); > > schedule(); > > set_restore_sigmask(); > > > > somehow got out of schedule() without TIF_SIGPENDING being set... > > A random wakeup (which are always possible) can make that happen, right?
Yes, sigsuspend() should do "while (!signal_pending(current))". Like sys_pause() does, -ERESTARTNOHAND without signal_pending() is equally wrong. I'll send the fix unless Sasha wants to do this. > I'm (as always) a little vague on signals, but who is responsible for > setting that bit? See above, TS_RESTORE_SIGMASK doesn't differ from -ERESTART* in that you can only use it if signal_pending() is true. Oleg. -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/

