From patchwork Thu Nov 29 19:40:00 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marc Zyngier X-Patchwork-Id: 1822341 Return-Path: X-Original-To: patchwork-kvm@patchwork.kernel.org Delivered-To: patchwork-process-083081@patchwork2.kernel.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by patchwork2.kernel.org (Postfix) with ESMTP id 1A767DF23A for ; Thu, 29 Nov 2012 19:40:16 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752468Ab2K2TkL (ORCPT ); Thu, 29 Nov 2012 14:40:11 -0500 Received: from service87.mimecast.com ([91.220.42.44]:45291 "EHLO service87.mimecast.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751136Ab2K2TkK (ORCPT ); Thu, 29 Nov 2012 14:40:10 -0500 Received: from cam-owa1.Emea.Arm.com (fw-tnat.cambridge.arm.com [217.140.96.21]) by service87.mimecast.com; Thu, 29 Nov 2012 19:40:08 +0000 Received: from e102391-lin.cambridge.arm.com ([10.1.255.212]) by cam-owa1.Emea.Arm.com with Microsoft SMTPSVC(6.0.3790.0); Thu, 29 Nov 2012 19:40:08 +0000 From: Marc Zyngier To: kvm@vger.kernel.org Cc: Pekka Enberg Subject: [PATCH] kvm-tool: fix zombie reaping in guest/init.c Date: Thu, 29 Nov 2012 19:40:00 +0000 Message-Id: <1354218000-4891-1-git-send-email-marc.zyngier@arm.com> X-Mailer: git-send-email 1.8.0.1 X-OriginalArrivalTime: 29 Nov 2012 19:40:08.0198 (UTC) FILETIME=[5683D260:01CDCE69] X-MC-Unique: 112112919400800201 Sender: kvm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org init.c is not very kind with processes that get reparented when their own parent die, leaving them hanging around. Looking at the code, it only seem to care about its own flesh and blood. Bad init. Teach it some basic zombie reaping skills. Cc: Pekka Enberg Signed-off-by: Marc Zyngier --- tools/kvm/guest/init.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/tools/kvm/guest/init.c b/tools/kvm/guest/init.c index ece48fd..8c49a03 100644 --- a/tools/kvm/guest/init.c +++ b/tools/kvm/guest/init.c @@ -61,7 +61,11 @@ int main(int argc, char *argv[]) else run_process("/bin/sh"); } else { - waitpid(child, &status, 0); + pid_t corpse; + + do { + corpse = waitpid(-1, &status, 0); + } while (corpse != child); } reboot(LINUX_REBOOT_CMD_RESTART);