diff options
| author | Konstantin Belousov <kib@FreeBSD.org> | 2019-03-27 22:35:28 +0000 |
|---|---|---|
| committer | Konstantin Belousov <kib@FreeBSD.org> | 2019-03-27 22:35:28 +0000 |
| commit | ad484b8c53380879340b8ca31088e24600aa61f9 (patch) | |
| tree | eeff9a1c99abaada5e40db3295b71da9c9a62ade /libexec | |
| parent | ca219866e32aa9d2f102a713acdba74390272313 (diff) | |
Notes
Diffstat (limited to 'libexec')
| -rw-r--r-- | libexec/rtld-elf/rtld.c | 14 |
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); } |
