This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Re: [PATCH] [BZ #18422] elf/tst-audit tests fail without PLT entries
- From: "H.J. Lu" <hjl dot tools at gmail dot com>
- To: Andreas Schwab <schwab at suse dot de>
- Cc: "Carlos O'Donell" <carlos at redhat dot com>, GNU C Library <libc-alpha at sourceware dot org>, Florian Weimer <fweimer at redhat dot com>, Adam Conrad <adconrad at 0c3 dot net>, Aurelien Jarno <aurelien at aurel32 dot net>, Jeff Law <law at redhat dot com>
- Date: Tue, 26 May 2015 04:19:31 -0700
- Subject: Re: [PATCH] [BZ #18422] elf/tst-audit tests fail without PLT entries
- Authentication-results: sourceware.org; auth=none
- References: <20150523131408 dot GA18203 at gmail dot com> <5561475D dot 9020406 at redhat dot com> <CAMe9rOq8AzAy0_pXW_xdzHV=+LnO7iuoNfwdhzkqPW7NzQaFuQ at mail dot gmail dot com> <55628397 dot 7050202 at redhat dot com> <CAMe9rOqAzx2xAVeOcgU0qpaHj4=+wWQzhyB3OVTq514ZVBPyyA at mail dot gmail dot com> <55637F7D dot 3010001 at redhat dot com> <mvm1ti3ahv5 dot fsf at hawking dot suse dot de>
On Tue, May 26, 2015 at 1:00 AM, Andreas Schwab <schwab@suse.de> wrote:
> "Carlos O'Donell" <carlos@redhat.com> writes:
>
>> In summary:
>> - My next worry is about free of calloc'd data that is now using dl-minimal.c
>
> Anything allocated with dl-minimal must strictly be kept inside ld.so
> and never be freed.
The calloc call is made at:
if (__glibc_unlikely (consider_profiling)
&& l->l_info[DT_PLTRELSZ] != NULL)
{
/* Allocate the array which will contain the already found
relocations. If the shared object lacks a PLT (for example
if it only contains lead function) the l_info[DT_PLTRELSZ]
will be NULL. */
size_t sizeofrel = l->l_info[DT_PLTREL]->d_un.d_val == DT_RELA
? sizeof (ElfW(Rela))
: sizeof (ElfW(Rel));
size_t relcount = l->l_info[DT_PLTRELSZ]->d_un.d_val / sizeofrel;
l->l_reloc_result = calloc (sizeof (l->l_reloc_result[0]), relcount);
if (l->l_reloc_result == NULL)
{
errstring = N_("\
%s: out of memory to store relocation results for %s\n");
_dl_fatal_printf (errstring, RTLD_PROGNAME, l->l_name);
}
}
ld.so never frees l->l_reloc_result.
--
H.J.