aboutsummaryrefslogtreecommitdiff
path: root/libexec
diff options
context:
space:
mode:
authorKonstantin Belousov <kib@FreeBSD.org>2019-03-27 22:35:28 +0000
committerKonstantin Belousov <kib@FreeBSD.org>2019-03-27 22:35:28 +0000
commitad484b8c53380879340b8ca31088e24600aa61f9 (patch)
treeeeff9a1c99abaada5e40db3295b71da9c9a62ade /libexec
parentca219866e32aa9d2f102a713acdba74390272313 (diff)
Notes
Diffstat (limited to 'libexec')
-rw-r--r--libexec/rtld-elf/rtld.c14
1 files changed, 7 insertions, 7 deletions
diff --git a/libexec/rtld-elf/rtld.c b/libexec/rtld-elf/rtld.c
index 691bb32f5f4be..c027fc89f41ba 100644
--- a/libexec/rtld-elf/rtld.c
+++ b/libexec/rtld-elf/rtld.c
@@ -2956,14 +2956,14 @@ resolve_object_ifunc(Obj_Entry *obj, bool bind_now, int flags,
if (obj->ifuncs_resolved)
return (0);
obj->ifuncs_resolved = true;
- if (obj->irelative && reloc_iresolve(obj, lockstate) == -1)
+ if (!obj->irelative && !((obj->bind_now || bind_now) && obj->gnu_ifunc))
+ return (0);
+ if (obj_disable_relro(obj) == -1 ||
+ (obj->irelative && reloc_iresolve(obj, lockstate) == -1) ||
+ ((obj->bind_now || bind_now) && obj->gnu_ifunc &&
+ reloc_gnu_ifunc(obj, flags, lockstate) == -1) ||
+ obj_enforce_relro(obj) == -1)
return (-1);
- if ((obj->bind_now || bind_now) && obj->gnu_ifunc) {
- if (obj_disable_relro(obj) ||
- reloc_gnu_ifunc(obj, flags, lockstate) == -1 ||
- obj_enforce_relro(obj))
- return (-1);
- }
return (0);
}