| commit eb77a1fccc7e60cea32245c11288c7f1d92545fa |
| Author: Florian Weimer <fweimer@redhat.com> |
| Date: Wed Oct 16 18:19:51 2019 +0200 |
| |
| dlfcn: Remove remnants of caller sensitivity from dlinfo |
| |
| dlinfo operates on a specific handle, which means that there is no |
| caller sensivity involved. |
| |
| diff --git a/dlfcn/dlinfo.c b/dlfcn/dlinfo.c |
| index 964572cc670ceba4..23ef3f57ca41afdf 100644 |
| |
| |
| @@ -26,7 +26,7 @@ |
| int |
| dlinfo (void *handle, int request, void *arg) |
| { |
| - return __dlinfo (handle, request, arg, RETURN_ADDRESS (0)); |
| + return __dlinfo (handle, request, arg); |
| } |
| |
| #else |
| @@ -35,7 +35,6 @@ dlinfo (void *handle, int request, void *arg) |
| |
| struct dlinfo_args |
| { |
| - ElfW(Addr) caller; |
| void *handle; |
| int request; |
| void *arg; |
| @@ -47,24 +46,6 @@ dlinfo_doit (void *argsblock) |
| struct dlinfo_args *const args = argsblock; |
| struct link_map *l = args->handle; |
| |
| -# if 0 |
| - if (args->handle == RTLD_SELF) |
| - { |
| - Lmid_t nsid; |
| - |
| - /* Find the highest-addressed object that CALLER is not below. */ |
| - for (nsid = 0; nsid < DL_NNS; ++nsid) |
| - for (l = GL(dl_ns)[nsid]._ns_loaded; l != NULL; l = l->l_next) |
| - if (caller >= l->l_map_start && caller < l->l_map_end |
| - && (l->l_contiguous || _dl_addr_inside_object (l, caller))) |
| - break; |
| - |
| - if (l == NULL) |
| - _dl_signal_error (0, NULL, NULL, N_("\ |
| -RTLD_SELF used in code not dynamically loaded")); |
| - } |
| -# endif |
| - |
| switch (args->request) |
| { |
| case RTLD_DI_CONFIGADDR: |
| @@ -108,16 +89,14 @@ RTLD_SELF used in code not dynamically loaded")); |
| } |
| |
| int |
| -__dlinfo (void *handle, int request, void *arg DL_CALLER_DECL) |
| +__dlinfo (void *handle, int request, void *arg) |
| { |
| # ifdef SHARED |
| if (!rtld_active ()) |
| - return _dlfcn_hook->dlinfo (handle, request, arg, |
| - DL_CALLER); |
| + return _dlfcn_hook->dlinfo (handle, request, arg); |
| # endif |
| |
| - struct dlinfo_args args = { (ElfW(Addr)) DL_CALLER, |
| - handle, request, arg }; |
| + struct dlinfo_args args = { handle, request, arg }; |
| return _dlerror_run (&dlinfo_doit, &args) ? -1 : 0; |
| } |
| # ifdef SHARED |
| diff --git a/include/dlfcn.h b/include/dlfcn.h |
| index 0dc57dbe2217cfe7..93dd369ab12a5745 100644 |
| |
| |
| @@ -117,7 +117,7 @@ struct dlfcn_hook |
| int (*dladdr) (const void *address, Dl_info *info); |
| int (*dladdr1) (const void *address, Dl_info *info, |
| void **extra_info, int flags); |
| - int (*dlinfo) (void *handle, int request, void *arg, void *dl_caller); |
| + int (*dlinfo) (void *handle, int request, void *arg); |
| void *(*dlmopen) (Lmid_t nsid, const char *file, int mode, void *dl_caller); |
| void *pad[4]; |
| }; |
| @@ -143,8 +143,7 @@ extern int __dladdr (const void *address, Dl_info *info) |
| extern int __dladdr1 (const void *address, Dl_info *info, |
| void **extra_info, int flags) |
| attribute_hidden; |
| -extern int __dlinfo (void *handle, int request, void *arg DL_CALLER_DECL) |
| - attribute_hidden; |
| +extern int __dlinfo (void *handle, int request, void *arg) attribute_hidden; |
| |
| #ifndef SHARED |
| struct link_map; |