svn commit: r356630 - head/libexec/rtld-elf

Konstantin Belousov kib at FreeBSD.org
Sat Jan 11 09:08:03 UTC 2020


Author: kib
Date: Sat Jan 11 09:08:02 2020
New Revision: 356630
URL: https://svnweb.freebsd.org/changeset/base/356630

Log:
  Stop prepending prefix to the result of realpath(3).
  
  The path is already absolute.
  
  Noted and reviewed by:	rstone
  Sponsored by:	The FreeBSD Foundation
  MFC after:	1 week
  Differential revision:	https://reviews.freebsd.org/D23121

Modified:
  head/libexec/rtld-elf/rtld.c

Modified: head/libexec/rtld-elf/rtld.c
==============================================================================
--- head/libexec/rtld-elf/rtld.c	Sat Jan 11 04:02:40 2020	(r356629)
+++ head/libexec/rtld-elf/rtld.c	Sat Jan 11 09:08:02 2020	(r356630)
@@ -5524,7 +5524,7 @@ static int
 open_binary_fd(const char *argv0, bool search_in_path,
     const char **binpath_res)
 {
-	char *abspath, *absres, *binpath, *pathenv, *pe, *res1;
+	char *binpath, *pathenv, *pe, *res1;
 	const char *res;
 	int fd;
 
@@ -5569,31 +5569,16 @@ open_binary_fd(const char *argv0, bool search_in_path,
 		rtld_die();
 	}
 	if (res != NULL && res[0] != '/') {
-		abspath = getcwd(NULL, 0);
-		if (abspath != NULL) {
-			res1 = xmalloc(PATH_MAX);
-			if (realpath(res, res1) != NULL) {
-				if (res != argv0)
-					free(__DECONST(char *, res));
-				res = res1;
-			} else {
-				free(res1);
-			}
-			absres = xmalloc(strlen(abspath) +
-			    strlen(res) + 2);
-			strcpy(absres, abspath);
-			strcat(absres, "/");
-			strcat(absres, res);
-			free(abspath);
+		res1 = xmalloc(PATH_MAX);
+		if (realpath(res, res1) != NULL) {
 			if (res != argv0)
 				free(__DECONST(char *, res));
-			*binpath_res = absres;
+			res = res1;
 		} else {
-			*binpath_res = res;
+			free(res1);
 		}
-	} else {
-		*binpath_res = res;
 	}
+	*binpath_res = res;
 	return (fd);
 }
 


More information about the svn-src-all mailing list