diff options
author | Philip Guenther <guenther@cvs.openbsd.org> | 2016-07-04 04:33:36 +0000 |
---|---|---|
committer | Philip Guenther <guenther@cvs.openbsd.org> | 2016-07-04 04:33:36 +0000 |
commit | 506102808d35ed6e7d36139f0f73b21fe0a6c77a (patch) | |
tree | 1ef97bd2e25e89614276c808d3fd9b0d2500fa77 | |
parent | 089837b80ca7fafd992bcbf87e7455c49e31665f (diff) |
The GOT has been initally mapped RW for *years*; ld.so doesn't need to
mprotect it to RW when filling in the references from the PLT
in snaps for a week, ok deraadt@
-rw-r--r-- | libexec/ld.so/i386/rtld_machine.c | 16 |
1 files changed, 1 insertions, 15 deletions
diff --git a/libexec/ld.so/i386/rtld_machine.c b/libexec/ld.so/i386/rtld_machine.c index f827a120e59..f5d1521df13 100644 --- a/libexec/ld.so/i386/rtld_machine.c +++ b/libexec/ld.so/i386/rtld_machine.c @@ -1,4 +1,4 @@ -/* $OpenBSD: rtld_machine.c,v 1.34 2016/05/26 17:23:39 deraadt Exp $ */ +/* $OpenBSD: rtld_machine.c,v 1.35 2016/07/04 04:33:35 guenther Exp $ */ /* * Copyright (c) 2002 Dale Rahn @@ -420,7 +420,6 @@ _dl_md_reloc_got(elf_object_t *object, int lazy) Elf_Addr *pltgot = (Elf_Addr *)object->Dyn.info[DT_PLTGOT]; int i, num; Elf_Rel *rel; - struct load_list *llist; if (pltgot == NULL) return (0); /* it is possible to have no PLT/GOT relocations */ @@ -439,24 +438,11 @@ _dl_md_reloc_got(elf_object_t *object, int lazy) rel = (Elf_Rel *)(object->Dyn.info[DT_JMPREL]); num = (object->Dyn.info[DT_PLTRELSZ]); - for (llist = object->load_list; llist != NULL; - llist = llist->next) { - if (!(llist->prot & PROT_WRITE)) - _dl_mprotect(llist->start, llist->size, - PROT_READ | PROT_WRITE); - } for (i = 0; i < num/sizeof(Elf_Rel); i++, rel++) { Elf_Addr *where; where = (Elf_Addr *)(rel->r_offset + object->obj_base); *where += object->obj_base; } - for (llist = object->load_list; llist != NULL; - llist = llist->next) { - if (!(llist->prot & PROT_WRITE)) - _dl_mprotect(llist->start, llist->size, - llist->prot); - } - } /* mprotect the GOT */ |