|
|
Message-ID: <20130710184725.40e733de@vostro>
Date: Wed, 10 Jul 2013 18:47:25 +0300
From: Timo Teras <timo.teras@....fi>
To: musl@...ts.openwall.com
Cc: dalias@...ifal.cx
Subject: Re: [PATCH 3/3] [FYI] fix dynamic linker dso loading
On Wed, 10 Jul 2013 11:00:03 -0400
Rich Felker <dalias@...ifal.cx> wrote:
> On Wed, Jul 10, 2013 at 04:39:01PM +0300, Timo Teräs wrote:
> > The phdr entries need to be allocated from heap, so later calls
> > to dl_iterate_phdr work properly. Make sure the ARM unwind info
> > is not freed.
>
> I am confused about the motivation for this patch. The program headers
> are part of the mapping and are never freed.
static void *map_library(int fd, struct dso *dso)
{
Ehdr buf[(896+sizeof(Ehdr))/sizeof(Ehdr)];
...
ssize_t l = read(fd, buf, sizeof buf);
...
ph = (void *)((char *)buf + eh->e_phoff);
...
dso->phdr = ph;
So no, the program headers are not part of the mapping. At least they
are not setup that way currently.
Instead dso->phdr points to stack and gets messed up. That's why the:
- dso->phdr = ph;
+ dso->phdr = malloc(phsize);
+ memcpy(dso->phdr, ph, phsize);
Perhaps the proper fix would be to map them instead then.
> > This is not exactly intended to be committed, but shows clearly
> > what is wrong with the current implementation.
>
> Not so clear. :)
Hope the above explains the root problem.
>
> > The reclamation fix should be probably something better, as I
> > believe the same applies to GNU_EH_FRAME phdr.
>
> It definitely does not apply to GNU_EH_FRAME.
Seems I misunderstood in hurry what the reclaim_gaps really does.
Probably one of the reasons why it has the "huge hack" comment.. :)
I believe the "ph->p_type != PT_ARM_EXIDX" additions are not needed
after all.
- Timo
Powered by blists - more mailing lists
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.