From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754017AbcA0Iou (ORCPT ); Wed, 27 Jan 2016 03:44:50 -0500 Received: from bombadil.infradead.org ([198.137.202.9]:50443 "EHLO bombadil.infradead.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752262AbcA0Ios (ORCPT ); Wed, 27 Jan 2016 03:44:48 -0500 Date: Wed, 27 Jan 2016 09:44:43 +0100 From: Peter Zijlstra To: Oleg Nesterov Cc: Andrew Morton , Sasha Levin , linux-kernel@vger.kernel.org, mingo@kernel.org Subject: Re: [PATCH] signals: work around random wakeups in sigsuspend() Message-ID: <20160127084443.GL6357@twins.programming.kicks-ass.net> References: <1453735306-13519-1-git-send-email-sasha.levin@oracle.com> <20160125133205.36542c86ada93761d8a9ff06@linux-foundation.org> <20160126211009.GA4695@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20160126211009.GA4695@redhat.com> User-Agent: Mutt/1.5.21 (2012-12-30) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, Jan 26, 2016 at 10:10:09PM +0100, Oleg Nesterov wrote: > And, ironically, there is another more serious "reverse" problem ;) sigsuspend() > orany other user of -ERESTARTNOHAND can "miss" the signal, in a sense that the > kernel can wrongly restart this syscall after return from signal handler. This > is not trivial to fix.. So I'm not entirely sure I get what you mean there. But it did get me to look at the patch again: + while (!signal_pending(current)) { + __set_current_state(TASK_INTERRUPTIBLE); + schedule(); + } That should very much be: for (;;) { set_current_state(TASK_INTERRUPTIBLE); if (signal_pending(current)) break; schedule(); } __set_current_state(TASK_RUNNING);