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,1371 ****
                                  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.
                                   */
                                  if (e_type == ET_DYN &&
                                      ((caddr_t)((uintptr_t)vaddr &
                                      (uintptr_t)PAGEMASK) != NULL)) {
                                          MOBJ_STAT_ADD(inval_header);
--- 1358,1376 ----
                                  MOBJ_STAT_ADD(nomem_header);
                                  continue;
                          }
                          if (num_segs++ == 0) {
                                  /*
!                                  * 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);