Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 12 Mar 2012 10:36:04 +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: r232856 - head/libexec/rtld-elf
Message-ID:  <201203121036.q2CAa4GU057919@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: kib
Date: Mon Mar 12 10:36:03 2012
New Revision: 232856
URL: http://svn.freebsd.org/changeset/base/232856

Log:
  When iterating over the dso program headers, the object is not initialized
  yet, and object segments are not yet mapped.  Only parse the notes that
  appear in the first page of the dso (as it should be anyway), and use
  the preloaded page content.
  
  Reported and tested by:	stass
  MFC after:	20 days

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

Modified: head/libexec/rtld-elf/map_object.c
==============================================================================
--- head/libexec/rtld-elf/map_object.c	Mon Mar 12 08:13:04 2012	(r232855)
+++ head/libexec/rtld-elf/map_object.c	Mon Mar 12 10:36:03 2012	(r232856)
@@ -149,7 +149,10 @@ map_object(int fd, const char *path, con
 	    break;
 
 	case PT_NOTE:
-	    note_start = (Elf_Addr)obj->relocbase + phdr->p_offset;
+	    if (phdr->p_offset > PAGE_SIZE ||
+	      phdr->p_offset + phdr->p_filesz > PAGE_SIZE)
+		break;
+	    note_start = (Elf_Addr)(char *)hdr + phdr->p_offset;
 	    note_end = note_start + phdr->p_filesz;
 	    digest_notes(obj, note_start, note_end);
 	    break;



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