summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTheo de Raadt <deraadt@cvs.openbsd.org>2022-11-08 06:55:54 +0000
committerTheo de Raadt <deraadt@cvs.openbsd.org>2022-11-08 06:55:54 +0000
commitaa2ad2bcf5bce6830d0e6086baa977abd9ecf9da (patch)
tree9b4d311840eef1446d9c090a6e3127ceacc718fe
parent8e8b1462cb0bc36cd6c11ab5ca61e0b50ff079ff (diff)
Since the introduction of automatic immutable from the kernel, the munmap()
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 riscv64, tested by jca
-rw-r--r--libexec/ld.so/riscv64/ld.script5
1 files changed, 4 insertions, 1 deletions
diff --git a/libexec/ld.so/riscv64/ld.script b/libexec/ld.so/riscv64/ld.script
index d0231259a0b..77f3a846a29 100644
--- a/libexec/ld.so/riscv64/ld.script
+++ b/libexec/ld.so/riscv64/ld.script
@@ -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;
@@ -25,10 +26,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);