diff options
author | Adhemerval Zanella <adhemerval.zanella@linaro.org> | 2021-07-19 18:42:26 -0300 |
---|---|---|
committer | Adhemerval Zanella <adhemerval.zanella@linaro.org> | 2021-12-28 08:40:38 -0300 |
commit | f0e23d34a7bdf6b90fba954ee741419171ac41b2 (patch) | |
tree | 5feb3808f994056a7e846f423124a718c242eb2f /elf/dl-object.c | |
parent | d1b38173c9255b1a4ae00018ad9b35404a7c74d0 (diff) | |
download | glibc-f0e23d34a7bdf6b90fba954ee741419171ac41b2.zip glibc-f0e23d34a7bdf6b90fba954ee741419171ac41b2.tar.gz glibc-f0e23d34a7bdf6b90fba954ee741419171ac41b2.tar.bz2 |
elf: Issue audit la_objopen for vDSO
The vDSO is is listed in the link_map chain, but is never the subject of
an la_objopen call. A new internal flag __RTLD_VDSO is added that
acts as __RTLD_OPENEXEC to allocate the required 'struct auditstate'
extra space for the 'struct link_map'.
The return value from the callback is currently ignored, since there
is no PLT call involved by glibc when using the vDSO, neither the vDSO
are exported directly.
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-object.c')
-rw-r--r-- | elf/dl-object.c | 17 |
1 files changed, 10 insertions, 7 deletions
diff --git a/elf/dl-object.c b/elf/dl-object.c index 1875599..dee49a3 100644 --- a/elf/dl-object.c +++ b/elf/dl-object.c @@ -59,16 +59,19 @@ _dl_new_object (char *realname, const char *libname, int type, { #ifdef SHARED unsigned int naudit; - if (__glibc_unlikely ((mode & __RTLD_OPENEXEC) != 0)) + if (__glibc_unlikely ((mode & (__RTLD_OPENEXEC | __RTLD_VDSO)) != 0)) { - assert (type == lt_executable); - assert (nsid == LM_ID_BASE); + if (mode & __RTLD_OPENEXEC) + { + assert (type == lt_executable); + assert (nsid == LM_ID_BASE); - /* Ignore the specified libname for the main executable. It is - only known with an explicit loader invocation. */ - libname = ""; + /* Ignore the specified libname for the main executable. It is + only known with an explicit loader invocation. */ + libname = ""; + } - /* We create the map for the executable before we know whether + /* We create the map for the executable and vDSO before we know whether we have auditing libraries and if yes, how many. Assume the worst. */ naudit = DL_NNS; |