(_dl_map_object_from_fd): Do all accesses to HEADER before unmapping the
authorroland <roland>
Sat, 30 Sep 1995 20:41:52 +0000 (20:41 +0000)
committerroland <roland>
Sat, 30 Sep 1995 20:41:52 +0000 (20:41 +0000)
file data.

elf/dl-load.c

index 2a50daa..12b945a 100644 (file)
@@ -247,13 +247,16 @@ _dl_map_object_from_fd (const char *name, int fd, char *realname)
        the headers.  */
     Elf32_Phdr phdr[header->e_phnum];
     const Elf32_Phdr *ph;
-    int anywhere;
+    int anywhere, type;
+
+    type = header->e_type;
+    anywhere = type == ET_DYN || type == ET_REL;
+    l->l_entry = header->e_entry;
 
     ph = map (header->e_phoff, header->e_phnum * sizeof (Elf32_Phdr));
     memcpy (phdr, ph, sizeof phdr);
     l->l_phnum = header->e_phnum;
 
-    anywhere = header->e_type == ET_DYN || header->e_type == ET_REL;
     /* We are done reading the file's headers now.  Unmap them.  */
     munmap (file_mapping, mapping_size);
 
@@ -370,7 +373,7 @@ _dl_map_object_from_fd (const char *name, int fd, char *realname)
 
     if (l->l_ld == 0)
       {
-       if (header->e_type == ET_DYN)
+       if (type == ET_DYN)
          LOSE ("object file has no dynamic section");
       }
     else
@@ -380,7 +383,7 @@ _dl_map_object_from_fd (const char *name, int fd, char *realname)
       l->l_phdr = (void *) ((const Elf32_Ehdr *) l->l_addr)->e_phoff;
     (Elf32_Addr) l->l_phdr += l->l_addr;
 
-    l->l_entry = l->l_addr + header->e_entry;
+    l->l_entry += l->l_addr;
   }
 
   elf_get_dynamic_info (l->l_ld, l->l_info);