From patchwork Thu Dec 1 21:17:07 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Bofjall X-Patchwork-Id: 9456917 X-Patchwork-Delegate: herbert@gondor.apana.org.au Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 92C9B60515 for ; Thu, 1 Dec 2016 21:17:21 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 7B8A82853D for ; Thu, 1 Dec 2016 21:17:21 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 702E428540; Thu, 1 Dec 2016 21:17:21 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=2.0 tests=BAYES_00,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 92F062853D for ; Thu, 1 Dec 2016 21:17:20 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752365AbcLAVRT (ORCPT ); Thu, 1 Dec 2016 16:17:19 -0500 Received: from h-85-24-133-13.na.cust.bahnhof.se ([85.24.133.13]:33630 "HELO gazonk.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with SMTP id S1751198AbcLAVRT (ORCPT ); Thu, 1 Dec 2016 16:17:19 -0500 Received: (qmail 31669 invoked from network); 1 Dec 2016 21:17:14 -0000 Received: from localhost (127.0.0.1) by localhost with SMTP; 1 Dec 2016 21:17:14 -0000 From: Andreas Bofjall To: dash@vger.kernel.org Cc: Andreas Bofjall Subject: [PATCH v2] trap: fix memory leak in exitshell() Date: Thu, 1 Dec 2016 22:17:07 +0100 Message-Id: <20161201211707.4710-1-andreas@gazonk.org> X-Mailer: git-send-email 2.10.2 Sender: dash-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: dash@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP After dash had executed the exit trap handler, the trap was reset but the pointer was never freed. This leak can be demonstrated by running dash through valgrind and executing the following shell script: foo() { true } trap foo EXIT Fix by properly freeing the trap pointer in exitshell(). Signed-off-by: Andreas Bofjall --- v2: move ckfree() to out path src/trap.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/trap.c b/src/trap.c index edb9938..0824223 100644 --- a/src/trap.c +++ b/src/trap.c @@ -378,7 +378,7 @@ void exitshell(void) { struct jmploc loc; - char *p; + char *p = NULL; savestatus = exitstatus; TRACE(("pid %d, exitshell(%d)\n", getpid(), savestatus)); @@ -391,6 +391,9 @@ exitshell(void) evalstring(p, 0); } out: + INTOFF; + ckfree(p); + INTON; /* * Disable job control so that whoever had the foreground before we * started can get it back.