For strange reasons which made sense at the time, the text segment was
authorderaadt <deraadt@openbsd.org>
Wed, 20 Dec 2023 14:50:08 +0000 (14:50 +0000)
committerderaadt <deraadt@openbsd.org>
Wed, 20 Dec 2023 14:50:08 +0000 (14:50 +0000)
placed head of the btext (boot.text) segment.  (the boot.text segment is
"unmapped" after initization, as a self-protection mechanism).  this meant
the LOAD's virtual addresses were not in sequence, which clearly isn't
what we intended.

12 files changed:
libexec/ld.so/aarch64/ld.script
libexec/ld.so/alpha/ld.script
libexec/ld.so/amd64/ld.script
libexec/ld.so/arm/ld.script
libexec/ld.so/hppa/ld.script
libexec/ld.so/i386/ld.script
libexec/ld.so/m88k/ld.script
libexec/ld.so/mips64/ld.script
libexec/ld.so/powerpc/ld.script
libexec/ld.so/riscv64/ld.script
libexec/ld.so/sh/ld.script
libexec/ld.so/sparc64/ld.script

index f2dbd18..23ff1c3 100644 (file)
@@ -1,8 +1,8 @@
 PHDRS
 {
        rodata  PT_LOAD FILEHDR PHDRS FLAGS (4);
-       text    PT_LOAD FLAGS (1);
        btext   PT_LOAD FLAGS (0x08000001);
+       text    PT_LOAD FLAGS (1);
        data    PT_LOAD;
        random  PT_OPENBSD_RANDOMIZE;
        syscalls PT_OPENBSD_SYSCALLS;
@@ -23,8 +23,6 @@ SECTIONS
 
     /* TEXT */
     . = ALIGN(0x10000);
-    .text      : { *(.text .text.*) } :text
-    . = ALIGN(0x1000);
     .boot.text :
     {
        . = ALIGN(0x1000);
@@ -33,6 +31,8 @@ SECTIONS
        . = ALIGN(0x1000);
        boot_text_end = .;
     } :btext
+    . = ALIGN(0x1000);
+    .text      : { *(.text .text.*) } :text
 
     /* RELRO DATA */
     . = DATA_SEGMENT_ALIGN (0x10000, 0x1000);
index 33bfb8d..dd642a2 100644 (file)
@@ -23,8 +23,6 @@ SECTIONS
 
     /* TEXT */
     . = ALIGN(0x10000);
-    .text      : { *(.text .text.*) } :text
-    . = ALIGN(0x2000);
     .boot.text :
     {
        . = ALIGN(0x2000);
@@ -33,6 +31,8 @@ SECTIONS
        *(.boot.text)
        boot_text_end = .;
     } :btext
+    . = ALIGN(0x2000);
+    .text      : { *(.text .text.*) } :text
 
     /* RELRO DATA */
     . = DATA_SEGMENT_ALIGN (0x10000, 0x2000);
index 12bb242..78da6e5 100644 (file)
@@ -1,8 +1,8 @@
 PHDRS
 {
        rodata  PT_LOAD FILEHDR PHDRS FLAGS (4);
-       text    PT_LOAD FLAGS (1);
        btext   PT_LOAD FLAGS (0x08000005);
+       text    PT_LOAD FLAGS (1);
        data    PT_LOAD;
        random  PT_OPENBSD_RANDOMIZE;
        syscalls PT_OPENBSD_SYSCALLS;
index 0d66e23..5784d96 100644 (file)
@@ -1,8 +1,8 @@
 PHDRS
 {
        rodata  PT_LOAD FILEHDR PHDRS FLAGS (4);
-       text    PT_LOAD;
        btext   PT_LOAD FLAGS (0x08000005);
+       text    PT_LOAD;
        data    PT_LOAD;
        random  PT_OPENBSD_RANDOMIZE;
        syscalls PT_OPENBSD_SYSCALLS;
@@ -24,8 +24,6 @@ SECTIONS
 
     /* TEXT */
     . = ALIGN(0x10000);
-    .text      : { *(.text .text.*) } :text
-    . = ALIGN(0x1000);
     .boot.text :
     {
        . = ALIGN(0x1000);
@@ -34,6 +32,8 @@ SECTIONS
        . = ALIGN(0x1000);
        boot_text_end = .;
     } :btext
+    . = ALIGN(0x1000);
+    .text      : { *(.text .text.*) } :text
 
     /* RELRO DATA */
     . = DATA_SEGMENT_ALIGN (0x10000, 0x1000);
index 163c667..6ea4aab 100644 (file)
@@ -1,8 +1,8 @@
 PHDRS
 {
        rodata  PT_LOAD FILEHDR PHDRS FLAGS (4);
-       text    PT_LOAD FLAGS (1);
        btext   PT_LOAD FLAGS (0x08000005);
+       text    PT_LOAD FLAGS (1);
        pltgot  PT_LOAD;
        data    PT_LOAD;
        random  PT_OPENBSD_RANDOMIZE;
@@ -24,8 +24,6 @@ SECTIONS
 
     /* TEXT */
     . = ALIGN(0x1000);
-    .text      : { *(.text .text.*) } :text
-    . = ALIGN(0x1000);
     .boot.text :
     {
        . = ALIGN(0x1000);
@@ -34,6 +32,8 @@ SECTIONS
        . = ALIGN(0x1000);
        boot_text_end = .;
     } :btext
+    . = ALIGN(0x1000);
+    .text      : { *(.text .text.*) } :text
 
     /* PLT and GOT */
     . = ALIGN(0x1000);
index 555c374..dc8cca7 100644 (file)
@@ -1,8 +1,8 @@
 PHDRS
 {
        rodata  PT_LOAD FILEHDR PHDRS FLAGS (4);
-       text    PT_LOAD FLAGS (1);
        btext   PT_LOAD FLAGS (0x08000005);
+       text    PT_LOAD FLAGS (1);
        data    PT_LOAD;
        random  PT_OPENBSD_RANDOMIZE;
        syscalls PT_OPENBSD_SYSCALLS;
index 3425245..b5f4057 100644 (file)
@@ -1,8 +1,8 @@
 PHDRS
 {
   rodata  PT_LOAD FILEHDR PHDRS FLAGS (4);
-  text    PT_LOAD;
   btext   PT_LOAD FLAGS (0x08000005);
+  text    PT_LOAD;
   data    PT_LOAD;
   random  PT_OPENBSD_RANDOMIZE;
   syscalls PT_OPENBSD_SYSCALLS;
index a1392fb..db68396 100644 (file)
@@ -1,8 +1,8 @@
 PHDRS
 {
        rodata  PT_LOAD FILEHDR PHDRS FLAGS (4);
-       text    PT_LOAD FLAGS (1);
        btext   PT_LOAD FLAGS (0x08000005);
+       text    PT_LOAD FLAGS (1);
        data    PT_LOAD;
        random  PT_OPENBSD_RANDOMIZE;
        syscalls PT_OPENBSD_SYSCALLS;
index afd66c5..a3fbc0c 100644 (file)
@@ -1,8 +1,8 @@
 PHDRS
 {
        rodata  PT_LOAD FILEHDR PHDRS FLAGS (4);
-       text    PT_LOAD FLAGS (1);
        btext   PT_LOAD FLAGS (0x08000005);
+       text    PT_LOAD FLAGS (1);
        data    PT_LOAD;
        random  PT_OPENBSD_RANDOMIZE;
        syscalls PT_OPENBSD_SYSCALLS;
index 7050c4a..91e9dc4 100644 (file)
@@ -1,8 +1,8 @@
 PHDRS
 {
        rodata  PT_LOAD FILEHDR PHDRS FLAGS (4);
-       text    PT_LOAD FLAGS (1);
        btext   PT_LOAD FLAGS (0x08000005);
+       text    PT_LOAD FLAGS (1);
        data    PT_LOAD;
        random  PT_OPENBSD_RANDOMIZE;
        syscalls PT_OPENBSD_SYSCALLS;
@@ -23,8 +23,6 @@ SECTIONS
 
     /* TEXT */
     . = ALIGN(0x10000);
-    .text      : { *(.text .text.*) } :text
-    . = ALIGN(0x1000);
     .boot.text :
     {
        . = ALIGN(0x1000);
@@ -33,6 +31,8 @@ SECTIONS
        . = ALIGN(0x1000);
        boot_text_end = .;
     } :btext
+    . = ALIGN(0x1000);
+    .text      : { *(.text .text.*) } :text
 
     /* RELRO DATA */
     . = DATA_SEGMENT_ALIGN (0x10000, 0x1000);
index d5a87d7..a393c8f 100644 (file)
@@ -1,8 +1,8 @@
 PHDRS
 {
        rodata  PT_LOAD FILEHDR PHDRS FLAGS (4);
-       text    PT_LOAD FLAGS (5);  /* architecturally required data islands */
        btext   PT_LOAD FLAGS (0x08000005);
+       text    PT_LOAD FLAGS (5);  /* architecturally required data islands */
        data    PT_LOAD;
        random  PT_OPENBSD_RANDOMIZE;
        syscalls PT_OPENBSD_SYSCALLS;
@@ -23,14 +23,14 @@ SECTIONS
 
   /* TEXT */
   . = ALIGN (0x1000);
-  .text           : { *(.text .text.*) } :text =0xc3c3c3c3
-  . = ALIGN (0x1000);
   .boot.text      :
   {
     boot_text_start = .;
     *(.boot.text)
     boot_text_end = .;
   } :btext
+  . = ALIGN (0x1000);
+  .text           : { *(.text .text.*) } :text =0xc3c3c3c3
 
   /* RELRO DATA */
   . = DATA_SEGMENT_ALIGN (0x10000, 0x1000);
index e7b0c06..77873fa 100644 (file)
@@ -1,8 +1,8 @@
 PHDRS
 {
        rodata  PT_LOAD FILEHDR PHDRS FLAGS (4);
-       text    PT_LOAD FLAGS (1);
        btext   PT_LOAD FLAGS (0x08000005);
+       text    PT_LOAD FLAGS (1);
        data    PT_LOAD;
        random  PT_OPENBSD_RANDOMIZE;
        syscalls PT_OPENBSD_SYSCALLS;