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:
Konstantin Belousov 2012-03-12 10:36:03 +00:00
parent c8b31c8f20
commit 5eab36f290

View File

@ -149,7 +149,10 @@ map_object(int fd, const char *path, const struct stat *sb)
break; break;
case PT_NOTE: 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; note_end = note_start + phdr->p_filesz;
digest_notes(obj, note_start, note_end); digest_notes(obj, note_start, note_end);
break; break;