summaryrefslogtreecommitdiff
path: root/elf
diff options
context:
space:
mode:
authorFlorian Weimer <fweimer@redhat.com>2020-02-26 15:58:23 +0100
committerFlorian Weimer <fweimer@redhat.com>2020-02-26 16:53:38 +0100
commit758599bc9dcc5764e862bd9e1613c5d1e6efc5d3 (patch)
treec8767228310408cb5111e89f741a56ae93f7bcc0 /elf
parentf1a0840c15d039631c13258544cdc04e4cbb9c69 (diff)
downloadglibc-758599bc9dcc5764e862bd9e1613c5d1e6efc5d3.tar.gz
elf: Apply attribute_relro to pointers in elf/dl-minimal.c
The present code leaves the function pointers unprotected, but moves some of the static functions into .data.rel.ro instead. This causes the linker to produce an allocatable, executable, writable section and eventually an RWX load segment. Not only do we really do not want that, it also breaks valgrind because valgrind does not load debuginfo from the mmap interceptor if all it sees are RX and RWX mappings. Fixes commit 3a0ecccb599a6b1ad4b149dc569c0080e92d057b ("ld.so: Do not export free/calloc/malloc/realloc functions [BZ #25486]").
Diffstat (limited to 'elf')
-rw-r--r--elf/dl-minimal.c16
1 files changed, 8 insertions, 8 deletions
diff --git a/elf/dl-minimal.c b/elf/dl-minimal.c
index c79ce23be4..7c64e24c87 100644
--- a/elf/dl-minimal.c
+++ b/elf/dl-minimal.c
@@ -39,16 +39,16 @@
implementation below. Before the final relocation,
__rtld_malloc_init_real is called to replace the pointers with the
real implementation. */
-__typeof (calloc) *__rtld_calloc;
-__typeof (free) *__rtld_free;
-__typeof (malloc) *__rtld_malloc;
-__typeof (realloc) *__rtld_realloc;
+__typeof (calloc) *__rtld_calloc attribute_relro;
+__typeof (free) *__rtld_free attribute_relro;
+__typeof (malloc) *__rtld_malloc attribute_relro;
+__typeof (realloc) *__rtld_realloc attribute_relro;
/* Defined below. */
-static __typeof (calloc) rtld_calloc attribute_relro;
-static __typeof (free) rtld_free attribute_relro;
-static __typeof (malloc) rtld_malloc attribute_relro;
-static __typeof (realloc) rtld_realloc attribute_relro;
+static __typeof (calloc) rtld_calloc;
+static __typeof (free) rtld_free;
+static __typeof (malloc) rtld_malloc;
+static __typeof (realloc) rtld_realloc;
void
__rtld_malloc_init_stubs (void)