Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 24 Oct 2017 10:48:27 +0000 (UTC)
From:      Edward Tomasz Napierala <trasz@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r324949 - head/libexec/rtld-elf
Message-ID:  <201710241048.v9OAmR0d098244@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: trasz
Date: Tue Oct 24 10:48:26 2017
New Revision: 324949
URL: https://svnweb.freebsd.org/changeset/base/324949

Log:
  Use xmalloc and read(2) instead of mmap(2) to read in libmap.conf(5).
  This removes the need to call munmap(2) afterwards.
  
  MFC after:	2 weeks
  Sponsored by:	DARPA, AFRL
  Differential Revision:	https://reviews.freebsd.org/D12767

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

Modified: head/libexec/rtld-elf/libmap.c
==============================================================================
--- head/libexec/rtld-elf/libmap.c	Tue Oct 24 08:56:11 2017	(r324948)
+++ head/libexec/rtld-elf/libmap.c	Tue Oct 24 10:48:26 2017	(r324949)
@@ -100,6 +100,7 @@ lmc_parse_file(char *path)
 {
 	struct lmc *p;
 	struct stat st;
+	ssize_t retval;
 	int fd;
 	char *lm_map;
 
@@ -128,10 +129,11 @@ lmc_parse_file(char *path)
 		}
 	}
 
-	lm_map = mmap(NULL, st.st_size, PROT_READ, MAP_PRIVATE, fd, 0);
-	if (lm_map == (const char *)MAP_FAILED) {
+	lm_map = xmalloc(st.st_size);
+	retval = read(fd, lm_map, st.st_size);
+	if (retval != st.st_size) {
 		close(fd);
-		dbg("lm_parse_file: mmap(\"%s\") failed, %s", path,
+		dbg("lm_parse_file: read(\"%s\") failed, %s", path,
 		    rtld_strerror(errno));
 		return;
 	}
@@ -142,7 +144,7 @@ lmc_parse_file(char *path)
 	p->ino = st.st_ino;
 	TAILQ_INSERT_HEAD(&lmc_head, p, next);
 	lmc_parse(lm_map, st.st_size);
-	munmap(lm_map, st.st_size);
+	free(lm_map);
 }
 
 static void



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