sel_ldr: Remove support for rodata segment at start of executable
authorMark Seaborn <[email protected]>
Wed, 20 Jan 2010 17:21:02 +0000 (20 17:21 +0000)
committerMark Seaborn <[email protected]>
Wed, 20 Jan 2010 17:21:02 +0000 (20 17:21 +0000)
ld.so no longer contains this PT_LOAD segment.

Partially reverts an earlier change.

service_runtime/sel_ldr_standard.c

index 10a7a14..a46d531 100644 (file)
 struct NaClPhdrChecks nacl_phdr_check_data[] = {
   /* phdr */
   { PT_PHDR, PF_R, PCA_IGNORE, 0, 0, },
-  /* rodata */
-  { PT_LOAD, PF_R, PCA_NONE, 0, 0, },
   /* text */
-  { PT_LOAD, PF_R|PF_X, PCA_TEXT_CHECK, 1, 0, },
+  { PT_LOAD, PF_R|PF_X, PCA_TEXT_CHECK, 1, NACL_TRAMPOLINE_END, },
   /* rodata */
   { PT_LOAD, PF_R, PCA_NONE, 0, 0, },
   /* data/bss */
@@ -111,9 +109,12 @@ NaClErrorCode NaClProcessPhdrs(struct NaClApp *nap)
          j < sizeof nacl_phdr_check_data/sizeof nacl_phdr_check_data[0];
          ++j) {
       if (php->p_type == nacl_phdr_check_data[j].p_type
-          && php->p_flags == nacl_phdr_check_data[j].p_flags
-         && !seen_seg[j]) {
+          && php->p_flags == nacl_phdr_check_data[j].p_flags) {
         NaClLog(2, "Matched nacl_phdr_check_data[%"PRIdS"]\n", j);
+        if (seen_seg[j]) {
+          NaClLog(2, "Segment %d is a type that has been seen\n", segnum);
+          return LOAD_DUP_SEGMENT;
+        }
         ++seen_seg[j];
 
         if (PCA_IGNORE == nacl_phdr_check_data[j].action) {