It's been a year since the ldscripts have created __plt_start or __plt_end
symbols, so references to them will never resolve. Just delete the
_dl_protect_segment() calls that are dependent on one or both of those
symbols.
ok?
Philip Guenther
Index: libexec/ld.so/alpha/rtld_machine.c
===================================================================
RCS file: /data/src/openbsd/src/libexec/ld.so/alpha/rtld_machine.c,v
retrieving revision 1.61
diff -u -p -r1.61 rtld_machine.c
--- libexec/ld.so/alpha/rtld_machine.c 16 Feb 2017 13:31:10 -0000 1.61
+++ libexec/ld.so/alpha/rtld_machine.c 9 Sep 2017 03:34:08 -0000
@@ -306,11 +306,6 @@ _dl_md_reloc_got(elf_object_t *object, i
_dl_protect_segment(object, seg_start, "__got_start", "__got_end",
PROT_READ);
- /* mprotect the PLT, if it isn't already read-only */
- if (pltro == 0)
- _dl_protect_segment(object, (Elf_Addr)pltgot, "__plt_start",
- "__plt_end", PROT_READ|PROT_EXEC);
-
return (fails);
}
Index: libexec/ld.so/powerpc/rtld_machine.c
===================================================================
RCS file: /data/src/openbsd/src/libexec/ld.so/powerpc/rtld_machine.c,v
retrieving revision 1.62
diff -u -p -r1.62 rtld_machine.c
--- libexec/ld.so/powerpc/rtld_machine.c 24 Jan 2017 10:59:10 -0000
1.62
+++ libexec/ld.so/powerpc/rtld_machine.c 9 Sep 2017 03:28:38 -0000
@@ -573,10 +573,6 @@ _dl_md_reloc_got(elf_object_t *object, i
if (prot_exec != 0 && got_addr != NULL)
_dl_syncicache(got_addr, 4);
- /* mprotect the PLT */
- _dl_protect_segment(object, 0, "__plt_start", "__plt_end",
- PROT_READ|prot_exec);
-
return (fails);
}
Index: libexec/ld.so/sparc64/rtld_machine.c
===================================================================
RCS file: /data/src/openbsd/src/libexec/ld.so/sparc64/rtld_machine.c,v
retrieving revision 1.60
diff -u -p -r1.60 rtld_machine.c
--- libexec/ld.so/sparc64/rtld_machine.c 28 Aug 2017 14:06:22 -0000
1.60
+++ libexec/ld.so/sparc64/rtld_machine.c 9 Sep 2017 03:25:15 -0000
@@ -841,10 +841,6 @@ _dl_md_reloc_got(elf_object_t *object, i
if (object->traced)
lazy = 1;
- /* temporarily make the PLT writable */
- _dl_protect_segment(object, 0, "__plt_start", "__plt_end",
- PROT_READ|PROT_WRITE);
-
if (!lazy) {
fails = _dl_md_reloc_all_plt(object);
} else {
@@ -856,10 +852,6 @@ _dl_md_reloc_got(elf_object_t *object, i
/* mprotect the GOT */
_dl_protect_segment(object, 0, "__got_start", "__got_end", PROT_READ);
-
- /* mprotect the PLT */
- _dl_protect_segment(object, 0, "__plt_start", "__plt_end",
- PROT_READ|PROT_EXEC);
return (fails);
}