From patchwork Fri Nov 12 20:10:54 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Joshua Watt X-Patchwork-Id: 1554573 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: bilbo.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=googlegroups.com header.i=@googlegroups.com header.a=rsa-sha256 header.s=20210112 header.b=mW7bX5og; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20210112 header.b=DMaTBPoQ; dkim-atps=neutral Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=googlegroups.com (client-ip=2607:f8b0:4864:20::83b; helo=mail-qt1-x83b.google.com; envelope-from=swupdate+bncbcz3hh5gu4jbbvmuxogamgqeffp7e6y@googlegroups.com; receiver=) Received: from mail-qt1-x83b.google.com (mail-qt1-x83b.google.com [IPv6:2607:f8b0:4864:20::83b]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by bilbo.ozlabs.org (Postfix) with ESMTPS id 4HrV8V5r7tz9sCD for ; Sat, 13 Nov 2021 07:11:05 +1100 (AEDT) Received: by mail-qt1-x83b.google.com with SMTP id v32-20020a05622a18a000b002b04d0d410dsf6834666qtc.11 for ; Fri, 12 Nov 2021 12:11:05 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1636747861; cv=pass; d=google.com; s=arc-20160816; b=EArt+UPW8JeLm/DQRb3P0laAjS0JbSx+831nPTK3fGqWoSkpqpf0N9XzzNrsHClKFc u8Z2nC9REcH3sXVFQ684cGpjXTOUXvbIc50rQGQ4DciQzieL/3Dv6MInd9JR4HAVRBFP 3Ae878p8F3E15+JF7lonNWLGhhNvaJGcBrzQOj/JJCcJPF87WvYSwcNJANZPy4uR0EUY LbK/rrt7KNZpDeOo5W7kCePeCOMIYi9F2o0yq2qktyP3zWEO8vE59dNce8+DLSLy15TJ KQyje5/uZwJElfDQigVilGg/M44GlNWnXDqWcuFpr9RQPFloBNt60Ou3lFVwbAu1BvJn Mt/w== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-unsubscribe:list-subscribe:list-archive:list-help:list-post :list-id:mailing-list:precedence:mime-version:message-id:date :subject:cc:to:from:sender:dkim-signature:dkim-signature; bh=bActgtTsd4/xnabjdAJ1JCEl9SdArWAINQepiJ87f7g=; b=guqI555hjsxn7pVojBhI/Z3eE3pjDbL3bg41ozrROqWOICUzzgeutxAUqRV0Fsc7Ze K/tw4X0/+AlRg7HBg3AzxcL3TCq9j9XV2Z7m1AZ1USm3R78R7xBikCw2D5Idrt2M/U4s CxzNhryhSAAAgDk5oQJQdGZfrCEgCybHxN2qH8CZZt8N/I2E6jaxeI938QVnYF/Dfhc3 nG8PzD16m89yiseen3JbCcCS2qVXBnyAC5urcSl0L9aZGuzG7M6217YRNTjSki+AhJro NMgKzfcmx0Cx65PKkJZwTOh+kQYS1d8MAyNYQm36jV7bbIeL/5yzlMuNzy2WeQ6qJX5P 2BVQ== ARC-Authentication-Results: i=2; gmr-mx.google.com; dkim=pass header.i=@gmail.com header.s=20210112 header.b=VZxFtGSo; spf=pass (google.com: domain of jpewhacker@gmail.com designates 2607:f8b0:4864:20::22d as permitted sender) smtp.mailfrom=jpewhacker@gmail.com; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=googlegroups.com; s=20210112; h=sender:from:to:cc:subject:date:message-id:mime-version :x-original-sender:x-original-authentication-results:precedence :mailing-list:list-id:list-post:list-help:list-archive :list-subscribe:list-unsubscribe; bh=bActgtTsd4/xnabjdAJ1JCEl9SdArWAINQepiJ87f7g=; b=mW7bX5ogAp9RHy447mG2HhQZU9I/ARMs1MjeIUM/naFPW5k8R8Uffv1i+JPa8gSvDh nVEELYcRiX6/3R+MKYc4OHRsrfKJx/dIZnTedrpxFjyj0Uumeczgyz2A/p3IRMJCABCw at035/CWia9P62RjcR9PSeeyyaoSUgKU8x4hu+N7J97UOHeVUuKmJVayIkCsxcKMojbh a7X/yFre/CtrKzCVm4h5f6NTvAIzIexfVt7qb/qP+aZOknhJ0LSmYX/np+TkLVMLAeCt uFXjxkkasZKrpTjg2iGYdw48E3Mvj/5BLblkFRFGihkwt/ErZYLLgLyvgrnX+oo9PwdJ wSvA== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:mime-version:x-original-sender :x-original-authentication-results:precedence:mailing-list:list-id :list-post:list-help:list-archive:list-subscribe:list-unsubscribe; bh=bActgtTsd4/xnabjdAJ1JCEl9SdArWAINQepiJ87f7g=; b=DMaTBPoQn/evExzW9X6t+QHe5iKNzJcH0rbQih5UaJeDvuNhiY0X2oYRVftM0WpQJk zoT3KhcOLtCaVgdIOVKh6/zn4dPgCYZ77ciIbewv1jQ5FHq/4DlKl/MKUirNGn4Y4E+j P079ftOK7eFVPz7gixd2Ir913n9wHKQ8xeAffw4wAhiQZRow1hsH80+K8rC1Kckia99u gkSn0gLlCfHoIJ+t1B6SHZzhAwXbPCXsbpc8A71RTnQzJ+psWaYdmh6WhJH2YXu70uXA sefYwfSR+UZyWMva8PpX/r1N0TTFoz7vgvFb4X6KtOFl3TkJmcstpote64Qtb4y+euuC y7bQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=sender:x-gm-message-state:from:to:cc:subject:date:message-id :mime-version:x-original-sender:x-original-authentication-results :precedence:mailing-list:list-id:x-spam-checked-in-group:list-post :list-help:list-archive:list-subscribe:list-unsubscribe; bh=bActgtTsd4/xnabjdAJ1JCEl9SdArWAINQepiJ87f7g=; b=a4AXXnLeajmdNEkLLyvkdNleJl3M0ZcCiYjg7Ave9rg2PIjR7kK+Sc3yEHhGpjGN6z iLHrpfxM8+jyaU2zv2PxbrCYFsxwgBG5NeiCqUTVzfI2S3Qc4gMtshXXS0gmLoUWbaI0 u9Ol0gXu6vecDztnilriGenrsqsT7N9SzRr7Nx8ryXdgi1GPruRZLhvRkr5129nAJrNw z0T/1IbN70GF299ZRerxdFeqxXsixU3IiElVJb5tPVdCb8Pn0VHiAuPHu0wEleHCp8Xu 798zh4B92HVm5OhY8Nbg4d2uH+3V7SrqzH85nmGoMJQTK7g3t3AUKPQxNITQlMhGm0Zn JJzg== Sender: swupdate@googlegroups.com X-Gm-Message-State: AOAM531cb8vydIdIQ4rSvxf0CBFTWHWy7eW7xBa7i31IMLTydmHbCrGg 5h5YJavPcvTpG6yHlz6h6Y0= X-Google-Smtp-Source: ABdhPJxYXXT6XZ2KjLlXoAEijbAJDhxiHrOBh/CSNbYJKQcg+UvMaAcZL/Kb8Jc+kAyusO2ePjPFiA== X-Received: by 2002:ac8:5914:: with SMTP id 20mr5850881qty.409.1636747861526; Fri, 12 Nov 2021 12:11:01 -0800 (PST) X-BeenThere: swupdate@googlegroups.com Received: by 2002:ac8:1e13:: with SMTP id n19ls4283160qtl.10.gmail; Fri, 12 Nov 2021 12:11:01 -0800 (PST) X-Received: by 2002:a05:622a:118b:: with SMTP id m11mr3389637qtk.165.1636747861142; Fri, 12 Nov 2021 12:11:01 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1636747861; cv=none; d=google.com; s=arc-20160816; b=lMM4IfZunWA9Yj2lK+Z0HSKI8uWMwq9U4lF14QR1NexrvNSxHy9AyLxii7O7FB6wAT RrH7oz5Z1crnkBWspDYBLhQlsMZUZgjhcgTeIHV6Se2LfYmC57/kNHXQenExyDqBjCtG JgEagNwssbSMbrVJYEUPgj0LmXNHAVOKme7/5J9IRTS/QxumHf3yqJJ2Bl5BJuhBlQnv eVtSPdKtlzr+eSbhPSLgzWjvIn/d/HqoQonx82gg/zcipofmpxy9lY3xcO7iTT11xMpx 2ildrO6rz3KD2azOFtFryIhU4q0EHmBHuAFNUQE2+y+aSdAdouTeVNPwtkjXgJVG/p3L m6eA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:dkim-signature; bh=3iuYq2seNgS6NpFcFBCu3m84PJg8DREqBjupWPBEEok=; b=vKH+Ye63xydeJutYC4FcHj6ReMpAhnUK1mxI1cYD/2DtN/zFCZ5pkMnguX42l136Y9 tTcxKtPKeFWt79ypsa0BlRo93vI6JvQGLPgVu48o0QfugLeNzj5JSQybejG2tfxPpsLW 9G5dgEMdo1UpjPSzRQLRcTywkA33UI69ZEVH0UNQzyWud48lDDxqolnWtT77kalsJleO lJIMNIARQrt1S9DQ99eaqbbQkLdpEzf3sAG+Ct2gPnc52wn9u3HZc5GMCcm9k2gxUZD4 upnGel+v0eQ60ibyvgIOVAlYcm0duEE/b/OF09u+TbeC7urVwHh690216jPfuilEkCaQ hr3A== ARC-Authentication-Results: i=1; gmr-mx.google.com; dkim=pass header.i=@gmail.com header.s=20210112 header.b=VZxFtGSo; spf=pass (google.com: domain of jpewhacker@gmail.com designates 2607:f8b0:4864:20::22d as permitted sender) smtp.mailfrom=jpewhacker@gmail.com; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from mail-oi1-x22d.google.com (mail-oi1-x22d.google.com. [2607:f8b0:4864:20::22d]) by gmr-mx.google.com with ESMTPS id n2si1320846qkp.4.2021.11.12.12.11.01 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 12 Nov 2021 12:11:01 -0800 (PST) Received-SPF: pass (google.com: domain of jpewhacker@gmail.com designates 2607:f8b0:4864:20::22d as permitted sender) client-ip=2607:f8b0:4864:20::22d; Received: by mail-oi1-x22d.google.com with SMTP id m6so20016850oim.2 for ; Fri, 12 Nov 2021 12:11:01 -0800 (PST) X-Received: by 2002:aca:4356:: with SMTP id q83mr29090599oia.157.1636747860471; Fri, 12 Nov 2021 12:11:00 -0800 (PST) Received: from localhost.localdomain ([2605:a601:ac3d:c100:e3e8:d9:3a56:e27d]) by smtp.gmail.com with ESMTPSA id l9sm1272119oom.4.2021.11.12.12.10.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 12 Nov 2021 12:11:00 -0800 (PST) From: Joshua Watt To: swupdate@googlegroups.com Cc: Joshua Watt Subject: [swupdate] [PATCH] Fix deadlock from calling exit() in signal handler Date: Fri, 12 Nov 2021 14:10:54 -0600 Message-Id: <20211112201054.3493178-1-JPEWhacker@gmail.com> X-Mailer: git-send-email 2.33.0 MIME-Version: 1.0 X-Original-Sender: JPEWhacker@gmail.com X-Original-Authentication-Results: gmr-mx.google.com; dkim=pass header.i=@gmail.com header.s=20210112 header.b=VZxFtGSo; spf=pass (google.com: domain of jpewhacker@gmail.com designates 2607:f8b0:4864:20::22d as permitted sender) smtp.mailfrom=jpewhacker@gmail.com; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Precedence: list Mailing-list: list swupdate@googlegroups.com; contact swupdate+owners@googlegroups.com List-ID: X-Spam-Checked-In-Group: swupdate@googlegroups.com X-Google-Group-Id: 605343134186 List-Post: , List-Help: , List-Archive: , List-Unsubscribe: , exit() cannot be called from a signal handler in swupdate because the atexit() handlers are not thread-safe and can deadlock. Instead, signal the main process to exit with SIGTERM when a child process dies. Signed-off-by: Joshua Watt --- core/pctl.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/core/pctl.c b/core/pctl.c index 9c2d534..c31575a 100644 --- a/core/pctl.c +++ b/core/pctl.c @@ -404,7 +404,6 @@ int run_system_cmd(const char *cmd) void sigchld_handler (int __attribute__ ((__unused__)) signum) { int childpid, status, serrno; - int exitstatus; int hasdied = 0; int i; @@ -427,11 +426,9 @@ void sigchld_handler (int __attribute__ ((__unused__)) signum) hasdied = 0; if (WIFEXITED(status)) { hasdied = 1; - exitstatus = WEXITSTATUS(status); - printf("exited, status=%d\n", exitstatus); + printf("exited, status=%d\n", WIFEXITED(status)); } else if (WIFSIGNALED(status)) { hasdied = 1; - exitstatus = WTERMSIG(status); printf("killed by signal %d\n", WTERMSIG(status)); } else if (WIFSTOPPED(status)) { printf("stopped by signal %d\n", WSTOPSIG(status)); @@ -454,7 +451,11 @@ void sigchld_handler (int __attribute__ ((__unused__)) signum) } } - exit(exitstatus); + /* + * exit() it not safe to call from a signal handler because of atexit() + * handlers, so send SIGTERM to ourself instead + */ + kill(getpid(), SIGTERM); } errno = serrno;