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>