Print this page
OS-5293 lx brand: prelink(8)'d binaries core dump before main()
Reviewed by: Patrick Mooney <patrick.mooney@joyent.com>
Reviewed by: Jerry Jelinek <jerry.jelinek@joyent.com>
        
@@ -1358,14 +1358,19 @@
                                 MOBJ_STAT_ADD(nomem_header);
                                 continue;
                         }
                         if (num_segs++ == 0) {
                                 /*
-                                 * The p_vaddr of the first PT_LOAD segment
-                                 * must either be NULL or within the first
-                                 * page in order to be interpreted.
-                                 * Otherwise, its an invalid file.
+                                 * While ELF doesn't specify the meaning of
+                                 * p_vaddr for PT_LOAD segments in ET_DYN
+                                 * objects, we mandate that is either NULL or
+                                 * (to accommodate some historical binaries)
+                                 * within the first page.  (Note that there
+                                 * exist non-native ET_DYN objects that violate
+                                 * this constraint that we nonetheless must be
+                                 * able to execute; see the ET_DYN handling in
+                                 * mapelfexec() for details.)
                                  */
                                 if (e_type == ET_DYN &&
                                     ((caddr_t)((uintptr_t)vaddr &
                                     (uintptr_t)PAGEMASK) != NULL)) {
                                         MOBJ_STAT_ADD(inval_header);