From patchwork Fri Nov 15 14:37:45 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jeff Layton X-Patchwork-Id: 3188491 Return-Path: X-Original-To: patchwork-linux-nfs@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.19.201]) by patchwork2.web.kernel.org (Postfix) with ESMTP id 456E1C045B for ; Fri, 15 Nov 2013 14:38:02 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 34CF2202EC for ; Fri, 15 Nov 2013 14:38:01 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 39A5F20896 for ; Fri, 15 Nov 2013 14:37:58 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751437Ab3KOOhz (ORCPT ); Fri, 15 Nov 2013 09:37:55 -0500 Received: from mail-qe0-f48.google.com ([209.85.128.48]:36321 "EHLO mail-qe0-f48.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751449Ab3KOOhx (ORCPT ); Fri, 15 Nov 2013 09:37:53 -0500 Received: by mail-qe0-f48.google.com with SMTP id a11so2264568qen.7 for ; Fri, 15 Nov 2013 06:37:52 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id; bh=IPUeNz8sUVV9r6FEmV7r9ZrLjwGCojJXuwCJ+fLZonE=; b=QSvjvTI3BIFP1V2/Aglv4Rl4plSbw/+VJeBLIP4wyUXNvJ0LM+PLshzBqy9s3dSyS3 arr1+IRfqKrWIF6IXb2p+JMVdfrOA79/XwgzrSf3Q8ofOTzdudVU7oJ7mke5VSzc5rzx r7ZsC40cJG4QsI0+Upk+IfApvPWN5KSxkrR6SNNwzc8UrbLqeb/sGc7ljmQGgUKlOEdB oMIOEzRJ8oh2lDNnJAM8xggwIaIe1GytSBt+4dkQm3mVj9tN9uNuyuP6gdHAE1psuKyD rXEa0o6qyXkIw0riqmyquk/+6+V3AarvjXOVS651dgncpEm4QdmpsqVeYCG8dMYOe85t sZ4A== X-Gm-Message-State: ALoCoQmOkX7SKfHkORp6tBgNldGB5Hpo3nYAzJrBXnfImXd29KjCrv4hrNXw1eg0701lY/kI9yyD X-Received: by 10.224.32.66 with SMTP id b2mr11321641qad.80.1384526270732; Fri, 15 Nov 2013 06:37:50 -0800 (PST) Received: from salusa.poochiereds.net (cpe-107-015-124-230.nc.res.rr.com. [107.15.124.230]) by mx.google.com with ESMTPSA id a5sm7406016qae.2.2013.11.15.06.37.49 for (version=TLSv1.2 cipher=AES128-GCM-SHA256 bits=128/128); Fri, 15 Nov 2013 06:37:50 -0800 (PST) From: Jeff Layton To: steved@redhat.com Cc: linux-nfs@vger.kernel.org Subject: [PATCH] gssd: don't let spurious signals interrupt the wait after forking Date: Fri, 15 Nov 2013 09:37:45 -0500 Message-Id: <1384526265-4494-1-git-send-email-jlayton@redhat.com> X-Mailer: git-send-email 1.8.3.1 Sender: linux-nfs-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org X-Spam-Status: No, score=-6.9 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_HI, RP_MATCHES_RCVD, UNPARSEABLE_RELAY autolearn=ham version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Because gssd uses dnotify under the hood, it's easily possible that the parent process can catch a signal while processing an upcall. If that happens, then we'll currently exit the wait for the child task to exit, and it'll end up as a zombie. Fix this by ensuring that we only wait for the child to actually exit. Signed-off-by: Jeff Layton --- utils/gssd/gssd_proc.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/utils/gssd/gssd_proc.c b/utils/gssd/gssd_proc.c index b48d163..447aec1 100644 --- a/utils/gssd/gssd_proc.c +++ b/utils/gssd/gssd_proc.c @@ -1040,7 +1040,10 @@ process_krb5_upcall(struct clnt_info *clp, uid_t uid, int fd, char *tgtname, return; default: /* Parent: just wait on child to exit and return */ - wait(&err); + do { + pid = wait(&err); + } while(pid == -1 && errno != -ECHILD); + if (WIFSIGNALED(err)) printerr(0, "WARNING: forked child was killed with signal %d\n", WTERMSIG(err));