diff options
author | Florian Weimer <fweimer@redhat.com> | 2024-10-25 16:50:10 +0200 |
---|---|---|
committer | Florian Weimer <fweimer@redhat.com> | 2024-10-25 16:50:10 +0200 |
commit | e096b7a1896886eb7dd2732ccbf1184b0eec9a63 (patch) | |
tree | 5103d7ac775aa666e88dec259263f223457e6969 /elf/dl-open.c | |
parent | 9897ced8e78db5d813166a7ccccfd5a42c69ef20 (diff) | |
download | glibc-e096b7a1896886eb7dd2732ccbf1184b0eec9a63.tar.gz glibc-e096b7a1896886eb7dd2732ccbf1184b0eec9a63.tar.xz glibc-e096b7a1896886eb7dd2732ccbf1184b0eec9a63.zip |
elf: Signal LA_ACT_CONSISTENT to auditors after RT_CONSISTENT switch
Auditors can call into the dynamic loader again if LA_ACT_CONSISTENT, and those recursive calls could observe r_state != RT_CONSISTENT. We should consider failing dlopen/dlmopen/dlclose if r_state != RT_CONSISTENT. The dynamic linker is probably not in a state in which it can handle reentrant calls. This needs further investigation. Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
Diffstat (limited to 'elf/dl-open.c')
-rw-r--r-- | elf/dl-open.c | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/elf/dl-open.c b/elf/dl-open.c index 2c20aa1df9..5e74807d23 100644 --- a/elf/dl-open.c +++ b/elf/dl-open.c @@ -628,17 +628,17 @@ dl_open_worker_begin (void *a) #endif } -#ifdef SHARED - /* Auditing checkpoint: we have added all objects. */ - _dl_audit_activity_nsid (new->l_ns, LA_ACT_CONSISTENT); -#endif - /* Notify the debugger all new objects are now ready to go. */ struct r_debug *r = _dl_debug_update (args->nsid); r->r_state = RT_CONSISTENT; _dl_debug_state (); LIBC_PROBE (map_complete, 3, args->nsid, r, new); +#ifdef SHARED + /* Auditing checkpoint: we have added all objects. */ + _dl_audit_activity_nsid (new->l_ns, LA_ACT_CONSISTENT); +#endif + _dl_open_check (new); /* Print scope information. */ |