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
This commit is contained in:
kib 2012-03-12 10:36:03 +00:00
parent ea14701c38
commit 7654527e54

View File

@ -149,7 +149,10 @@ map_object(int fd, const char *path, const struct stat *sb)
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;