bfd/
authorRoland McGrath <roland@gnu.org>
Thu, 29 Nov 2012 19:07:53 +0000 (19:07 +0000)
committerRoland McGrath <roland@gnu.org>
Thu, 29 Nov 2012 19:07:53 +0000 (19:07 +0000)
* elf-nacl.c (segment_eligible_for_headers): Disallow writable segments.

bfd/ChangeLog
bfd/elf-nacl.c

index 5d033a6d8ee3b713b2f565ee94b5ab70441728e8..199e11193303f5f2a3481501bd849405a024d7b8 100644 (file)
@@ -1,3 +1,7 @@
+2012-11-29  Roland McGrath  <mcgrathr@google.com>
+
+       * elf-nacl.c (segment_eligible_for_headers): Disallow writable segments.
+
 2012-11-26  Roland McGrath  <mcgrathr@google.com>
 
        * elf-nacl.c (nacl_modify_segment_map): Don't crash when INFO is null.
index ce401fae3c4dd94adc366d57f100bd7d03c08501..6753c7cfbf26314f8b19e57612dac301260d65b4 100644 (file)
@@ -43,9 +43,9 @@ segment_executable (struct elf_segment_map *seg)
 }
 
 /* Determine if this segment is eligible to receive the file and program
-   headers.  It must be non-executable and have contents.  Its first
-   section must start far enough past the page boundary to allow space
-   for the headers.  */
+   headers.  It must be read-only, non-executable, and have contents.
+   Its first section must start far enough past the page boundary to
+   allow space for the headers.  */
 static bfd_boolean
 segment_eligible_for_headers (struct elf_segment_map *seg,
                               bfd_vma maxpagesize, bfd_vma sizeof_headers)
@@ -56,7 +56,7 @@ segment_eligible_for_headers (struct elf_segment_map *seg,
     return FALSE;
   for (i = 0; i < seg->count; ++i)
     {
-      if (seg->sections[i]->flags & SEC_CODE)
+      if ((seg->sections[i]->flags & (SEC_CODE|SEC_READONLY)) != SEC_READONLY)
         return FALSE;
       if (seg->sections[i]->flags & SEC_HAS_CONTENTS)
         any_contents = TRUE;