aboutsummaryrefslogtreecommitdiff
path: root/libexec
diff options
context:
space:
mode:
authorKonstantin Belousov <kib@FreeBSD.org>2025-01-18 23:23:28 +0000
committerKonstantin Belousov <kib@FreeBSD.org>2025-01-21 01:44:22 +0000
commitbf3fbf74d12cc6dff54ed17acf4a680cc0c9cdee (patch)
treec5e324a05b353dfd37bced5b16d7745808b96c02 /libexec
parent7e2f38311e62b1a3ba4a023042f2dc36e27cdd06 (diff)
Diffstat (limited to 'libexec')
-rw-r--r--libexec/rtld-elf/rtld.c22
1 files changed, 10 insertions, 12 deletions
diff --git a/libexec/rtld-elf/rtld.c b/libexec/rtld-elf/rtld.c
index 8ec883227908..169ec0200ea5 100644
--- a/libexec/rtld-elf/rtld.c
+++ b/libexec/rtld-elf/rtld.c
@@ -5987,20 +5987,18 @@ obj_remap_relro(Obj_Entry *obj, int prot)
for (ph = obj->phdr; (const char *)ph < (const char *)obj->phdr +
obj->phsize; ph++) {
- switch (ph->p_type) {
- case PT_GNU_RELRO:
- relro_page = obj->relocbase +
- rtld_trunc_page(ph->p_vaddr);
- relro_size = rtld_round_page(ph->p_vaddr +
- ph->p_memsz) - rtld_trunc_page(ph->p_vaddr);
- if (mprotect(relro_page, relro_size, prot) == -1) {
- _rtld_error(
+ if (ph->p_type != PT_GNU_RELRO)
+ continue;
+ relro_page = obj->relocbase + rtld_trunc_page(ph->p_vaddr);
+ relro_size = rtld_round_page(ph->p_vaddr + ph->p_memsz) -
+ rtld_trunc_page(ph->p_vaddr);
+ if (mprotect(relro_page, relro_size, prot) == -1) {
+ _rtld_error(
"%s: Cannot set relro protection to %#x: %s",
- obj->path, prot, rtld_strerror(errno));
- return (-1);
- }
- break;
+ obj->path, prot, rtld_strerror(errno));
+ return (-1);
}
+ break;
}
return (0);
}