The crash happens only when calling eglReleaseThread() from destructor
of the process. Please find the attached simple app which can be used to
repro the issue.

With valgrind, I see there is some invalid memory access during the
eglReleaseThread() call. Find the logs below:

==5059== Invalid read of size 8
==5059==    at 0x70480EC: eglReleaseThread (eglapi.c:1706)
==5059==    by 0x48825B7: eglReleaseThread (in 
/usr/lib/aarch64-linux-gnu/libEGL.so.1.1.0)
==5059==    by 0x1089FB: deinit (in /home/ubuntu/egl_sample/egl_sample)
==5059==    by 0x400EBFF: _dl_fini (dl-fini.c:138)
==5059==    by 0x48DC84B: __run_exit_handlers (exit.c:108)
==5059==    by 0x48DC9DB: exit (exit.c:139)
==5059==    by 0x48C7093: (below main) (libc-start.c:342)
==5059==  Address 0x4c6f8c8 is 8 bytes inside a block of size 48 free'd
==5059==    at 0x484AF20: free (in 
/usr/lib/aarch64-linux-gnu/valgrind/vgpreload_memcheck-arm64-linux.so)
==5059==    by 0x7051FE3: _eglDestroyThreadInfo (eglcurrent.c:134)
==5059==    by 0x7051FE3: _eglFiniTSD (eglcurrent.c:76)
==5059==    by 0x70539CF: _eglAtExit (eglglobals.c:112)
==5059==    by 0x48DC84B: __run_exit_handlers (exit.c:108)
==5059==    by 0x48DC9DB: exit (exit.c:139)
==5059==    by 0x48C7093: (below main) (libc-start.c:342)  

So eglReleaseThread() in this case, tries to access the _EGLThreadInfo
memory already freed by _eglFiniTSD() ? But it is expected that a new
instance of _EGLThreadInfo has to be created when eglReleaseThread() is
called from the app in this case.

** Attachment added: "egl_sample.tar"
   
https://bugs.launchpad.net/ubuntu/+source/mesa/+bug/1946621/+attachment/5531907/+files/egl_sample.tar

-- 
You received this bug notification because you are a member of Ubuntu
Touch seeded packages, which is subscribed to mesa in Ubuntu.
https://bugs.launchpad.net/bugs/1946621

Title:
  Crash in libegl-mesa0 (eglReleaseThread)

Status in mesa package in Ubuntu:
  New

Bug description:
  Crash in libegl-mesa0 (in eglReleaseThread API), please find the
  backtrace:

  #0  0x0000fffff7c86ac4 in __GI___pthread_mutex_lock (mutex=mutex@entry=0x8) 
at pthread_mutex_lock.c:67
  #1  0x0000fffff4a7d110 in mtx_lock (mtx=0x8) at 
../include/c11/threads_posix.h:223
  #2  eglReleaseThread () at ../src/egl/main/eglapi.c:1713
  #3  0x0000fffff6c115b8 in eglReleaseThread () at 
/lib/aarch64-linux-gnu/libEGL.so.1
  #4  0x0000fffff7fdac00 in  () at /lib/ld-linux-aarch64.so.1
  #5  0x0000fffff7b4284c in __run_exit_handlers
      (status=0, listp=0xfffff7c76680 <__exit_funcs>, 
run_list_atexit=run_list_atexit@entry=true, run_dtors=run_dtors@entry=true) at 
exit.c:108
  #6  0x0000fffff7b429dc in __GI_exit (status=<optimized out>) at exit.c:139
  #7  0x0000fffff7b2d094 in __libc_start_main (main=
      0xaaaaaaaa3530 <main>, argc=13, argv=0xfffffffff488, init=<optimized 
out>, fini=<optimized out>, rtld_fini=<optimized out>, stack_end=<optimized 
out>)
      at ../csu/libc-start.c:342
  #8  0x0000aaaaaaaa4014 in _start ()

  It crashes at:
  https://github.com/mesa3d/mesa/blob/mesa-21.0.3/src/egl/main/eglapi.c#L1713.
  'disp' pointer is being NULL in this case.

  Actually nvidia's EGL backend is being loaded by glvnd in this case.
  But the eglReleaseThread() implementation of glvnd calls the
  eglReleaseThread() API of all the vendors, that's how it end-up
  calling the eglReleaseThread() API of Mesa backend. Refer:
  https://github.com/NVIDIA/libglvnd/blob/master/src/EGL/libegl.c#L806

  lsb_release -a
  No LSB modules are available.
  Distributor ID: Ubuntu
  Description:    Ubuntu 20.04.3 LTS
  Release:        20.04
  Codename:       focal

  apt-cache policy libegl-mesa0
  libegl-mesa0:
    Installed: 21.0.3-0ubuntu0.3~20.04.2
    Candidate: 21.0.3-0ubuntu0.3~20.04.2
    Version table:
   *** 21.0.3-0ubuntu0.3~20.04.2 500
          500 http://ports.ubuntu.com/ubuntu-ports focal-updates/main arm64 
Packages
          100 /var/lib/dpkg/status
       20.0.4-2ubuntu1 500
          500 http://ports.ubuntu.com/ubuntu-ports focal/main arm64 Packages

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/mesa/+bug/1946621/+subscriptions


-- 
Mailing list: https://launchpad.net/~touch-packages
Post to     : touch-packages@lists.launchpad.net
Unsubscribe : https://launchpad.net/~touch-packages
More help   : https://help.launchpad.net/ListHelp

Reply via email to