On Sat, May 08, 2021 at 07:26:32AM +0200, Sebastien Marie wrote:
> On Thu, May 06, 2021 at 06:23:08PM -0700, Anindya Mukherjee wrote:
> > On Thu, May 06, 2021 at 08:00:56AM -0600, Todd C. Miller wrote:
> > > On Thu, 06 May 2021 09:32:28 +0200, Sebastien Marie wrote:
> > > 
> > > > We already take care of such situation with __cxa_thread_atexit_impl
> > > > (in libc/stdlib/thread_atexit.c), by keeping an additionnal reference
> > > > on object loaded (it makes ld.so aware that it is still used and so
> > > > dlclose() doesn't unload it).
> > > >
> > > > I used the same idiom for pthread_key_create() and used dlctl(3) in
> > > > the same way with the destructor address.
> > > 
> > > This will set STAT_NODELETE so the DSO will never really get unloaded.
> > > That's not a problem for atexit() since the process is headed for
> > > the exit.
> > > 
> > > I'm less sure about using it here since we don't have a way to
> > > unreference the DSO upon pthread_key_delete().
> > > 
> > >  - todd
> > 
> > I did a quick investigation on my Linux machine and there mpv seems to
> > be using libEGL_mesa.so instead of iris_dri.so. In this case I am not
> > seeing a call to pthread_key_create at the start of video playback
> > (there are some other places where pthread_key_create is called from but
> > they don't cause a problem). So, not sure what happens in Linux when
> > iris_dri.so is used.
> 
> libEGL_mesa.so seems to be used when mesa is built with 'with_glvnd'
> option. glvnd is "vendor-neutral libGL" :
>   https://gitlab.freedesktop.org/glvnd/libglvnd
> 

This is very interesting! Since Arch Linux's version of Mesa is indeed
build with glvnd enabled:
https://github.com/archlinux/svntogit-packages/blob/packages/mesa/trunk/PKGBUILD#L53
it avoids this issue. So, it seems the main problem is in iris_dri.so.

> 
> > However, the Linux implementation of
> > pthread_key_create seems to also not increment the refcount when the
> > destructor is set so I don't yet see how it's solved there, assuming
> > iris_dri.so behaves identically.
> 
> glibc seems to have the same problem with pthread_key_create():
>   https://sourceware.org/bugzilla/show_bug.cgi?id=21032
> and the bugreport reference a simple poc at
>   https://github.com/Aaron1011/pthread_dlopen
> 

Thanks! I found some of these as well while searching for related issues
on Linux. So it seems this is not OpenBSD specific, as I suspected.

> 
> -- 
> Sebastien Marie

Regards,
Anindya

Reply via email to