Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 20 Sep 2011 21:49:54 +0000 (UTC)
From:      Konstantin Belousov <kib@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r225699 - head/libexec/rtld-elf
Message-ID:  <201109202149.p8KLnttg045996@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: kib
Date: Tue Sep 20 21:49:54 2011
New Revision: 225699
URL: http://svn.freebsd.org/changeset/base/225699

Log:
  Restore the writing of the .bss sections of the dsos (not the main
  executable) after r190885. The whole region for the dso is mmaped with
  MAP_NOCORE flag, doing only mprotect(2) over .bss prevented it from
  writing .bss to core files.
  
  Revert the optimization of using mprotect(2) to establish .bss, overlap
  the section with mmap(2).
  
  Reported by:	attilio
  Reviewed by:	attilio, emaste
  Approved by:	re (bz)
  MFC after:	2 weeks

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

Modified: head/libexec/rtld-elf/map_object.c
==============================================================================
--- head/libexec/rtld-elf/map_object.c	Tue Sep 20 20:27:26 2011	(r225698)
+++ head/libexec/rtld-elf/map_object.c	Tue Sep 20 21:49:54 2011	(r225699)
@@ -215,8 +215,9 @@ map_object(int fd, const char *path, con
 	    bss_vlimit = round_page(segs[i]->p_vaddr + segs[i]->p_memsz);
 	    bss_addr = mapbase +  (bss_vaddr - base_vaddr);
 	    if (bss_vlimit > bss_vaddr) {	/* There is something to do */
-		if (mprotect(bss_addr, bss_vlimit - bss_vaddr, data_prot) == -1) {
-		    _rtld_error("%s: mprotect of bss failed: %s", path,
+		if (mmap(bss_addr, bss_vlimit - bss_vaddr, data_prot,
+		    data_flags | MAP_ANON, -1, 0) == (caddr_t)-1) {
+		    _rtld_error("%s: mmap of bss failed: %s", path,
 			strerror(errno));
 		    return NULL;
 		}



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