mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-24 14:00:30 +00:00
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
This commit is contained in:
parent
c9bf28d625
commit
c7bf5ceab6
15
elf/Makefile
15
elf/Makefile
@ -193,7 +193,7 @@ tests += restest1 preloadtest loadfail multiload origtest resolvfail \
|
||||
tst-debug1 tst-main1 tst-absolute-sym tst-absolute-zero tst-big-note \
|
||||
tst-unwind-ctor tst-unwind-main tst-audit13 \
|
||||
tst-sonamemove-link tst-sonamemove-dlopen tst-dlopen-tlsmodid \
|
||||
tst-dlopen-self
|
||||
tst-dlopen-self tst-auditmany
|
||||
# reldep9
|
||||
tests-internal += loadtest unload unload2 circleload1 \
|
||||
neededtest neededtest2 neededtest3 neededtest4 \
|
||||
@ -281,7 +281,10 @@ modules-names = testobj1 testobj2 testobj3 testobj4 testobj5 testobj6 \
|
||||
tst-main1mod tst-libc_dlvsym-dso tst-absolute-sym-lib \
|
||||
tst-absolute-zero-lib tst-big-note-lib tst-unwind-ctor-lib \
|
||||
tst-audit13mod1 tst-sonamemove-linkmod1 \
|
||||
tst-sonamemove-runmod1 tst-sonamemove-runmod2
|
||||
tst-sonamemove-runmod1 tst-sonamemove-runmod2 \
|
||||
tst-auditmanymod1 tst-auditmanymod2 tst-auditmanymod3 \
|
||||
tst-auditmanymod4 tst-auditmanymod5 tst-auditmanymod6 \
|
||||
tst-auditmanymod7 tst-auditmanymod8 tst-auditmanymod9
|
||||
# Most modules build with _ISOMAC defined, but those filtered out
|
||||
# depend on internal headers.
|
||||
modules-names-tests = $(filter-out ifuncmod% tst-libc_dlvsym-dso tst-tlsmod%,\
|
||||
@ -1426,6 +1429,14 @@ $(objpfx)tst-audit13.out: $(objpfx)tst-audit13mod1.so
|
||||
LDFLAGS-tst-audit13mod1.so = -Wl,-z,lazy
|
||||
tst-audit13-ENV = LD_AUDIT=$(objpfx)tst-audit13mod1.so
|
||||
|
||||
$(objpfx)tst-auditmany.out: $(objpfx)tst-auditmanymod1.so \
|
||||
$(objpfx)tst-auditmanymod2.so $(objpfx)tst-auditmanymod3.so \
|
||||
$(objpfx)tst-auditmanymod4.so $(objpfx)tst-auditmanymod5.so \
|
||||
$(objpfx)tst-auditmanymod6.so $(objpfx)tst-auditmanymod7.so \
|
||||
$(objpfx)tst-auditmanymod8.so $(objpfx)tst-auditmanymod9.so
|
||||
tst-auditmany-ENV = \
|
||||
LD_AUDIT=tst-auditmanymod1.so:tst-auditmanymod2.so:tst-auditmanymod3.so:tst-auditmanymod4.so:tst-auditmanymod5.so:tst-auditmanymod6.so:tst-auditmanymod7.so:tst-auditmanymod8.so:tst-auditmanymod9.so
|
||||
|
||||
# tst-sonamemove links against an older implementation of the library.
|
||||
LDFLAGS-tst-sonamemove-linkmod1.so = \
|
||||
-Wl,--version-script=tst-sonamemove-linkmod1.map \
|
||||
|
14
elf/rtld.c
14
elf/rtld.c
@ -1008,13 +1008,7 @@ ERROR: audit interface '%s' requires version %d (maximum supported version %d);
|
||||
|
||||
/* Store the pointer. */
|
||||
if (err_str == NULL && largs.result != NULL)
|
||||
{
|
||||
newp->fptr[cnt] = largs.result;
|
||||
|
||||
/* The dynamic linker link map is statically allocated,
|
||||
initialize the data now. */
|
||||
GL(dl_rtld_map).l_audit[cnt].cookie = (intptr_t) &GL(dl_rtld_map);
|
||||
}
|
||||
newp->fptr[cnt] = largs.result;
|
||||
else
|
||||
newp->fptr[cnt] = NULL;
|
||||
++cnt;
|
||||
@ -1030,6 +1024,12 @@ ERROR: audit interface '%s' requires version %d (maximum supported version %d);
|
||||
*last_audit = GLRO(dl_audit) = &newp->ifaces;
|
||||
else
|
||||
*last_audit = (*last_audit)->next = &newp->ifaces;
|
||||
|
||||
/* The dynamic linker link map is statically allocated, initialize
|
||||
the data now. */
|
||||
GL (dl_rtld_map).l_audit[GLRO (dl_naudit)].cookie
|
||||
= (intptr_t) &GL (dl_rtld_map);
|
||||
|
||||
++GLRO(dl_naudit);
|
||||
|
||||
/* Mark the DSO as being used for auditing. */
|
||||
|
26
elf/tst-auditmany.c
Normal file
26
elf/tst-auditmany.c
Normal file
@ -0,0 +1,26 @@
|
||||
/* Check cookie initialization for many auditors. Main program.
|
||||
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/>. */
|
||||
|
||||
/* It does not make sense to use the test harness for this test
|
||||
because the testing happens in auditors. */
|
||||
|
||||
int
|
||||
main (void)
|
||||
{
|
||||
return 0;
|
||||
}
|
64
elf/tst-auditmanymod.h
Normal file
64
elf/tst-auditmanymod.h
Normal file
@ -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;
|
||||
}
|
20
elf/tst-auditmanymod1.c
Normal file
20
elf/tst-auditmanymod1.c
Normal file
@ -0,0 +1,20 @@
|
||||
/* Check cookie initialization for many auditors. Auditor 1.
|
||||
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/>. */
|
||||
|
||||
#define MOD 1
|
||||
#include "tst-auditmanymod.h"
|
20
elf/tst-auditmanymod2.c
Normal file
20
elf/tst-auditmanymod2.c
Normal file
@ -0,0 +1,20 @@
|
||||
/* Check cookie initialization for many auditors. Auditor 2.
|
||||
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/>. */
|
||||
|
||||
#define MOD 2
|
||||
#include "tst-auditmanymod.h"
|
20
elf/tst-auditmanymod3.c
Normal file
20
elf/tst-auditmanymod3.c
Normal file
@ -0,0 +1,20 @@
|
||||
/* Check cookie initialization for many auditors. Auditor 3.
|
||||
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/>. */
|
||||
|
||||
#define MOD 3
|
||||
#include "tst-auditmanymod.h"
|
20
elf/tst-auditmanymod4.c
Normal file
20
elf/tst-auditmanymod4.c
Normal file
@ -0,0 +1,20 @@
|
||||
/* Check cookie initialization for many auditors. Auditor 4.
|
||||
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/>. */
|
||||
|
||||
#define MOD 4
|
||||
#include "tst-auditmanymod.h"
|
20
elf/tst-auditmanymod5.c
Normal file
20
elf/tst-auditmanymod5.c
Normal file
@ -0,0 +1,20 @@
|
||||
/* Check cookie initialization for many auditors. Auditor 5.
|
||||
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/>. */
|
||||
|
||||
#define MOD 5
|
||||
#include "tst-auditmanymod.h"
|
20
elf/tst-auditmanymod6.c
Normal file
20
elf/tst-auditmanymod6.c
Normal file
@ -0,0 +1,20 @@
|
||||
/* Check cookie initialization for many auditors. Auditor 6.
|
||||
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/>. */
|
||||
|
||||
#define MOD 6
|
||||
#include "tst-auditmanymod.h"
|
20
elf/tst-auditmanymod7.c
Normal file
20
elf/tst-auditmanymod7.c
Normal file
@ -0,0 +1,20 @@
|
||||
/* Check cookie initialization for many auditors. Auditor 7.
|
||||
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/>. */
|
||||
|
||||
#define MOD 7
|
||||
#include "tst-auditmanymod.h"
|
20
elf/tst-auditmanymod8.c
Normal file
20
elf/tst-auditmanymod8.c
Normal file
@ -0,0 +1,20 @@
|
||||
/* Check cookie initialization for many auditors. Auditor 8.
|
||||
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/>. */
|
||||
|
||||
#define MOD 8
|
||||
#include "tst-auditmanymod.h"
|
20
elf/tst-auditmanymod9.c
Normal file
20
elf/tst-auditmanymod9.c
Normal file
@ -0,0 +1,20 @@
|
||||
/* Check cookie initialization for many auditors. Auditor 9.
|
||||
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/>. */
|
||||
|
||||
#define MOD 9
|
||||
#include "tst-auditmanymod.h"
|
Loading…
Reference in New Issue
Block a user