Messages in this thread | | | Date | Mon, 30 Nov 2015 19:48:04 +0100 | From | Oleg Nesterov <> | Subject | Re: WARNING: CPU: 12 PID: 16862 at ./arch/x86/include/asm/thread_info.h:236 |
| |
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.
| |