Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 16 Apr 2017 22:10:02 +0000 (UTC)
From:      Jilles Tjoelker <jilles@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r317039 - in head/bin/sh: . tests/parser
Message-ID:  <201704162210.v3GMA2mm043789@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: jilles
Date: Sun Apr 16 22:10:02 2017
New Revision: 317039
URL: https://svnweb.freebsd.org/changeset/base/317039

Log:
  sh: Fix use after free when resetting an in-use alias.
  
  The special case of modifying an existing alias does not work correctly if
  the alias is currently in use. Instead, handle this case by unaliasing the
  old alias (if any) and then creating a new alias.

Added:
  head/bin/sh/tests/parser/alias18.0   (contents, props changed)
Modified:
  head/bin/sh/alias.c
  head/bin/sh/tests/parser/Makefile

Modified: head/bin/sh/alias.c
==============================================================================
--- head/bin/sh/alias.c	Sun Apr 16 21:57:25 2017	(r317038)
+++ head/bin/sh/alias.c	Sun Apr 16 22:10:02 2017	(r317039)
@@ -63,17 +63,8 @@ setalias(const char *name, const char *v
 {
 	struct alias *ap, **app;
 
+	unalias(name);
 	app = hashalias(name);
-	for (ap = *app; ap; ap = ap->next) {
-		if (equal(name, ap->name)) {
-			INTOFF;
-			ckfree(ap->val);
-			ap->val	= savestr(val);
-			INTON;
-			return;
-		}
-	}
-	/* not found */
 	INTOFF;
 	ap = ckmalloc(sizeof (struct alias));
 	ap->name = savestr(name);

Modified: head/bin/sh/tests/parser/Makefile
==============================================================================
--- head/bin/sh/tests/parser/Makefile	Sun Apr 16 21:57:25 2017	(r317038)
+++ head/bin/sh/tests/parser/Makefile	Sun Apr 16 22:10:02 2017	(r317039)
@@ -24,6 +24,7 @@ ${PACKAGE}FILES+=	alias14.0
 ${PACKAGE}FILES+=	alias15.0 alias15.0.stdout
 ${PACKAGE}FILES+=	alias16.0
 ${PACKAGE}FILES+=	alias17.0
+${PACKAGE}FILES+=	alias18.0
 ${PACKAGE}FILES+=	and-pipe-not.0
 ${PACKAGE}FILES+=	case1.0
 ${PACKAGE}FILES+=	case2.0

Added: head/bin/sh/tests/parser/alias18.0
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/bin/sh/tests/parser/alias18.0	Sun Apr 16 22:10:02 2017	(r317039)
@@ -0,0 +1,8 @@
+# $FreeBSD$
+
+v=1
+alias a='alias a=v=2
+v=3
+a'
+eval a
+[ "$v" = 2 ]



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201704162210.v3GMA2mm043789>