rtld: Sync 2/7 - Remove potential map leakage
authorJohn Marino <draco@marino.st>
Wed, 12 Jun 2013 11:15:29 +0000 (13:15 +0200)
committerJohn Marino <draco@marino.st>
Thu, 13 Jun 2013 11:12:07 +0000 (13:12 +0200)
commite2f980f582877c02b3e2b96ea49aa5f3cf14a640
treee6ff314667bcfb7a116010a8411e5974b6ca31ce
parent9066fe90d0cfacdcc68ac4e33a768ae24a149519
rtld: Sync 2/7 - Remove potential map leakage

Eliminate the static buffer used to read the first page of the mapped
object, and eliminate the pread(2) call as well.  Mmap the first page
of the object temporarily and unmap it on error or last use.  Potentially
this leaves a one page gap between succeeding dlopen(3), but there are
other mmap(2) consumers as well.

This fixes several cases where the whole mapping of the object leaked
upon error.  The MAP_PREFAULT_READ code had to be skipped because the
mmap on DragonFly doesn't support this flag.

----

Map libraries linked with -Ttext-segment=base_addr at base_addr.
Normal libraries have a base address of zero and are unaffected by this
change.

Taken from:
FreeBSD SVN 237058 (14 JUN 2012)
FreeBSD SVN 247396 (27 FEB 2013)
libexec/rtld-elf/map_object.c