diff options
author | Adhemerval Zanella <adhemerval.zanella@linaro.org> | 2021-07-20 11:03:34 -0300 |
---|---|---|
committer | Adhemerval Zanella <adhemerval.zanella@linaro.org> | 2021-12-28 08:40:38 -0300 |
commit | 3dac3959a5cb585b065cef2cb8a8d909c907e202 (patch) | |
tree | 7cafc3b94478fc6050c7a6db09f98bf4ac448f9d /elf/dl-audit.c | |
parent | aee6e90f93e285016b6cd9c8bd00402c19ba271b (diff) | |
download | glibc-3dac3959a5cb585b065cef2cb8a8d909c907e202.tar.gz glibc-3dac3959a5cb585b065cef2cb8a8d909c907e202.tar.xz glibc-3dac3959a5cb585b065cef2cb8a8d909c907e202.zip |
elf: Add _dl_audit_activity_map and _dl_audit_activity_nsid
It consolidates the code required to call la_activity audit callback. Also for a new Lmid_t the namespace link_map list are empty, so it requires to check if before using it. This can happen for when audit module is used along with dlmopen. Checked on x86_64-linux-gnu, i686-linux-gnu, and aarch64-linux-gnu. Reviewed-by: Florian Weimer <fweimer@redhat.com>
Diffstat (limited to 'elf/dl-audit.c')
-rw-r--r-- | elf/dl-audit.c | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/elf/dl-audit.c b/elf/dl-audit.c index 4066dfe851..74b87f4b39 100644 --- a/elf/dl-audit.c +++ b/elf/dl-audit.c @@ -19,6 +19,32 @@ #include <ldsodefs.h> void +_dl_audit_activity_map (struct link_map *l, int action) +{ + struct audit_ifaces *afct = GLRO(dl_audit); + for (unsigned int cnt = 0; cnt < GLRO(dl_naudit); ++cnt) + { + if (afct->activity != NULL) + afct->activity (&link_map_audit_state (l, cnt)->cookie, action); + afct = afct->next; + } +} + +void +_dl_audit_activity_nsid (Lmid_t nsid, int action) +{ + /* If head is NULL, the namespace has become empty, and the audit interface + does not give us a way to signal LA_ACT_CONSISTENT for it because the + first loaded module is used to identify the namespace. */ + struct link_map *head = GL(dl_ns)[nsid]._ns_loaded; + if (__glibc_likely (GLRO(dl_naudit) == 0) + || head == NULL || head->l_auditing) + return; + + _dl_audit_activity_map (head, action); +} + +void _dl_audit_objopen (struct link_map *l, Lmid_t nsid) { if (__glibc_likely (GLRO(dl_naudit) == 0)) |