This is the mail archive of the
libc-help@sourceware.org
mailing list for the glibc project.
Re: dlmopen in LD_PRELOAD
> Does the library you load via dlmopen contain its own definition of
malloc, perhaps indirectly?
I don't think so, though the dynamic library does depends on libc.so. To
elaborate, the dynamic library is a rust `cdylib` (`.so`),
rust use system malloc by default, however, rust does use TLS quite
extensively. glibc's malloc uses TLS by default, seems even
malloc-experimental disabled during configure phase.
Maybe `LD_PRELOAD` a customized `libmalloc.so` (without using TLS) could be
an option, though I wouldn't like the idea because malloc itself exports
quite a lot symbols, and the
additional efforts of having to maintain the hacky `libmalloc.so`. Using
exactly the same glibc is a huge plus and I'd really like to stick will
this route.
Also worth mentioning is if I manually patch `__get_nprocs`, which is
called `area_get2`, then I can see the stack overflow any longer. the
pseudo assembly used to patch `__get_nprocs`:
/*
__libc_get_nprocs:
0: b8 02 00 00 00 mov $0x2,%eax
5: c3 retq
*/
Thanks
Baojun
On Mon, Jun 17, 2019 at 2:40 PM Florian Weimer <fweimer@redhat.com> wrote:
> * Baojun Wang:
>
> > Can `dlmopen` be called in a DSO being `LD_PRELOAD`-ed? The idea is to
> > create a minimal DSO used for `LD_PRELOAD`, then inside the DSO
> > (.init_array), call `dlmopen` to open the DSO that I'm really interested
> > in. hence the DSO being `LD_PRELOAD` acts like a mini loader only.
> >
> > I did exactly above, but ran into issue (segfault) with stack overflow:
>
> Does the library you load via dlmopen contain its own definition of
> malloc, perhaps indirectly?
>
> I expect what happens that with regular LD_PRELOAD, its TLS usage gets
> promoted to the static TLS allocation, which is allocated by the dynamic
> loader by the bootstrap/minimal malloc. With the indirection through
> dlmopen, dynamic TLS will be allocated with malloc, which does not work
> if malloc itself uses dynamic TLS. You can try to build that malloc
> with initial-exec TLS, but dlmopen'ing that could then fail because the
> static TLS reserve could be exhausted.
>
> Thanks,
> Florian
>