Since the introduction of automatic immutable from the kernel, the munmap()
authorderaadt <deraadt@openbsd.org>
Wed, 9 Nov 2022 18:39:35 +0000 (18:39 +0000)
committerderaadt <deraadt@openbsd.org>
Wed, 9 Nov 2022 18:39:35 +0000 (18:39 +0000)
of ld.so boot.text region is now (silently) failing because the region is
contained within the text LOAD, which is immutable.  So create a new btext
LOAD with flags PF_X|PF_R|PF_OPENBSD_MUTABLE, and place all boot.text objects
in there.  This LOAD must also be page-aligned so it doesn't skip unmapping
some of the object region, previously it was hilariously unaligned.
ok kettenis and guenther seemed to like it also
This one is for 32-bit arm, tested by phessler

libexec/ld.so/arm/ld.script

index f18abe0..ae7cc09 100644 (file)
@@ -2,6 +2,7 @@ PHDRS
 {
        rodata  PT_LOAD FILEHDR PHDRS FLAGS (4);
        text    PT_LOAD;
+       btext   PT_LOAD FLAGS (0x08000005);
        data    PT_LOAD;
        random  PT_OPENBSD_RANDOMIZE;
        relro   PT_GNU_RELRO;
@@ -26,10 +27,12 @@ SECTIONS
     . = ALIGN(0x1000);
     .boot.text :
     {
+       . = ALIGN(0x1000);
        boot_text_start = .;
        *(.boot.text)
+       . = ALIGN(0x1000);
        boot_text_end = .;
-    } :text
+    } :btext
 
     /* RELRO DATA */
     . = DATA_SEGMENT_ALIGN (0x10000, 0x1000);