[PATCH v2] trap: fix memory leak in exitshell()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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 <andreas@xxxxxxxxxx>
---
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.
-- 
2.10.2

--
To unsubscribe from this list: send the line "unsubscribe dash" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [LARTC]     [Bugtraq]     [Yosemite Forum]     [Photo]

  Powered by Linux