dlmopen with RTLD_GLOBAL

Carlos O'Donell carlos@redhat.com
Tue Jul 4 12:49:00 GMT 2017


On 07/04/2017 05:50 AM, Florian Weimer wrote:
> On 07/03/2017 08:37 PM, Elliott Slaughter wrote:
>> On Mon, Jul 3, 2017 at 11:27 AM, Florian Weimer <fweimer@redhat.com> wrote:
>>> On 06/30/2017 11:52 PM, Elliott Slaughter wrote:
>>>> main:
>>>>   dlmopen(LM_ID_NEWLM, "libpython2.7.so", RTLD_DEEPBIND | RTLD_LOCAL |
>>>> RTLD_LAZY)
>>>>   from inside user Python script:
>>>>     import some_native_module
>>>>     this causes Python to execute the following (remember this is
>>>> inside the new namespace):
>>>>       dlopen("some_native_module.so", ...)
>>>>
>>>> If RTLD_GLOBAL is an option with dlmopen, then the symbols can be
>>>> exposed within the new namespace, and subsequent dlopen calls to
>>>> shared objects that do not explicitly mention Python will succeed.
>>>
>>> What happens if you reload libpython2.7.so with RTLD_GLOBAL within the
>>> namespace?
>>
>> I believe there is an outstanding bug for that:
>>
>> https://sourceware.org/bugzilla/show_bug.cgi?id=18684
> 
> Oh.  So there is no quick way to test what you are intending to do.

This bug is a missing piece of the implementation. It is completely OK
to have a child dlopen in a namespace use RTLD_GLOBAL, but it needs
fixing because it's effectively a new feature.

-- 
Cheers,
Carlos.



More information about the Libc-help mailing list