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;
_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "[email protected]"

Reply via email to