diff options
author | Florian Weimer <fweimer@redhat.com> | 2019-11-02 21:55:35 +0100 |
---|---|---|
committer | Florian Weimer <fweimer@redhat.com> | 2019-11-15 13:03:32 +0100 |
commit | c7bf5ceab6ec776ac7350d3b0190776bf532ac54 (patch) | |
tree | 0a55d917ee9439e22eb1242fb1b13f935e2b45e3 /elf/tst-auditmanymod.h | |
parent | c9bf28d625ad1533935d40ae94b15453d0c98508 (diff) | |
download | glibc-c7bf5ceab6ec776ac7350d3b0190776bf532ac54.tar.gz glibc-c7bf5ceab6ec776ac7350d3b0190776bf532ac54.tar.xz glibc-c7bf5ceab6ec776ac7350d3b0190776bf532ac54.zip |
Properly initialize audit cookie for the dynamic loader [BZ #25157]
The l_audit array is indexed by audit module, not audit function. Change-Id: I180eb3573dc1c57433750f5d8cb18271460ba5f2
Diffstat (limited to 'elf/tst-auditmanymod.h')
-rw-r--r-- | elf/tst-auditmanymod.h | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/elf/tst-auditmanymod.h b/elf/tst-auditmanymod.h new file mode 100644 index 0000000000..d1d89e0843 --- /dev/null +++ b/elf/tst-auditmanymod.h @@ -0,0 +1,64 @@ +/* Check cookie initialization for many auditors. Auditor template. + Copyright (C) 2019 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +/* The macro MOD must be defined to the number of this auditor (an + integer) before including this file. */ + +#include <link.h> +#include <stdio.h> +#include <unistd.h> + +/* Error counter for delayed error reporting. */ +static int errors; + +unsigned int +la_version (unsigned int version) +{ + return version; +} + +unsigned int +la_objopen (struct link_map *map, Lmid_t lmid, + uintptr_t *cookie) +{ + struct link_map *cookie_map = (struct link_map *) *cookie; + printf ("info: %d, la_objopen: map=%p name=%s cookie=%p:%p diff=%td\n", + MOD, map, map->l_name, cookie, cookie_map, + (char *) cookie - (char *) map); + fflush (stdout); + if (map != cookie_map) + { + printf ("error: %d, la_objopen:" + " map address does not match cookie value\n", + MOD); + fflush (stdout); + ++errors; + } + return 0; +} + +extern unsigned int +la_objclose (uintptr_t *__cookie) +{ + if (errors != 0) + { + printf ("error: exiting due to previous errors"); + _exit (1); + } + return 0; +} |