From: Ulrich Drepper Date: Sat, 24 Jan 2004 08:33:05 +0000 (+0000) Subject: (_dl_relocate_object): Move PT_GNU_RELRO protection into... (_dl_protect_relro):... X-Git-Tag: upstream/2.20~11358 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=75631a576303d3bf23c0db077dcf5dc15c863063;p=platform%2Fupstream%2Flinaro-glibc.git (_dl_relocate_object): Move PT_GNU_RELRO protection into... (_dl_protect_relro): New routine. --- diff --git a/elf/dl-reloc.c b/elf/dl-reloc.c index 21d1871..0fda3de 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__