From 75631a576303d3bf23c0db077dcf5dc15c863063 Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Sat, 24 Jan 2004 08:33:05 +0000 Subject: [PATCH] (_dl_relocate_object): Move PT_GNU_RELRO protection into... (_dl_protect_relro): New routine. --- elf/dl-reloc.c | 30 ++++++++++++++++-------------- 1 file changed, 16 insertions(+), 14 deletions(-) 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)); - - if (start != end - && __mprotect ((void *) start, end - start, PROT_READ) < 0) - { - errstring = N_("\ -cannot apply additional memory protection after relocation"); - goto call_error; - } - } + _dl_protect_relro (l); } INTDEF (_dl_relocate_object) +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"); + INTUSE(_dl_signal_error) (errno, l->l_name, NULL, errstring); + } +} void internal_function __attribute_noinline__