From 75631a576303d3bf23c0db077dcf5dc15c863063 Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Sat, 24 Jan 2004 08:33:05 +0000 Subject: (_dl_relocate_object): Move PT_GNU_RELRO protection into... (_dl_protect_relro): New routine. --- elf/dl-reloc.c | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) (limited to 'elf') diff --git a/elf/dl-reloc.c b/elf/dl-reloc.c index 21d1871c6d..0fda3de3a7 100644 --- a/elf/dl-reloc.c +++ b/elf/dl-reloc.c @@ -311,23 +311,25 @@ _dl_relocate_object (struct link_map *l, struct r_scope_elem *scope[], /* In case we can protect the data now that the relocations are done, do it. */ if (l->l_relro_size != 0) - { - ElfW(Addr) start = ((l->l_addr + l->l_relro_addr) - & ~(GL(dl_pagesize) - 1)); - ElfW(Addr) end = ((l->l_addr + l->l_relro_addr + l->l_relro_size) - & ~(GL(dl_pagesize) - 1)); + _dl_protect_relro (l); +} +INTDEF (_dl_relocate_object) - if (start != end - && __mprotect ((void *) start, end - start, PROT_READ) < 0) - { - errstring = N_("\ +void internal_function +_dl_protect_relro (struct link_map *l) +{ + ElfW(Addr) start = ((l->l_addr + l->l_relro_addr) & ~(GL(dl_pagesize) - 1)); + ElfW(Addr) end = ((l->l_addr + l->l_relro_addr + l->l_relro_size) + & ~(GL(dl_pagesize) - 1)); + + if (start != end + && __mprotect ((void *) start, end - start, PROT_READ) < 0) + { + const char *errstring = N_("\ cannot apply additional memory protection after relocation"); - goto call_error; - } + INTUSE(_dl_signal_error) (errno, l->l_name, NULL, errstring); } } -INTDEF (_dl_relocate_object) - void internal_function __attribute_noinline__ -- cgit v1.2.3