NetBSD-Users archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

11RC5: any EGL app (X11) crashes on exit with SIGSEGV - dlopen/atexit strikes again



Hello!

Had found that specific X11 applications (fastfetch from latest pkgsrc) crashes on exit with SIGSEGV. It is same class of problem as reported earlier with Mesa applications - see https://gnats.netbsd.org/cgi-bin/query-pr-single.pl?number=60025 but this time it is in different place.

How to reproduce:
* have NetBSD 11.0_RC5 installed with X11
* run application that uses libEGL - tested "fastfetch" from pkgsrc
* it will SIGSEGV on exit - because of atexit(3) call inside libEGL.so library loaded via dlopen(3) - which is not supported on NetBSD.


Details in GDB session:
gdb /usr/pkg/bin/fastfetch.

+break main
Breakpoint 1 at 0x2bf57: file /home/ansible/pkgsrc/sysutils/fastfetch/work/fastfetch-2.64.2/src/fastfetch.c, line 831.
+run
Starting program: /usr/pkg/bin/fastfetch

Breakpoint 1, main (argc=1, argv=0x7f7fff6f39f8) at /home/ansible/pkgsrc/sysutils/fastfetch/work/fastfetch-2.64.2/src/fastfetch.c:831
831	int main(int argc, char** argv) {
+break dlopen
Breakpoint 2 at 0x7adb3ee1b2f0: dlopen. (2 locations)
+c
Continuing.

Breakpoint 2.2, dlopen (name=name@entry=0x7f7fff6f2b70 "nss_compat.so.0", mode=mode@entry=513) at /usr/src/libexec/ld.elf_so/rtld.c:1090
1090	{
+break atexit
Breakpoint 3 at 0x7adb3ef1164b: file /usr/src/lib/libc/stdlib/atexit.c, line 265.
+c
Continuing.

Breakpoint 2.2, dlopen (name=name@entry=0x7f7fff6f2b70 "nss_nis.so.0", mode=mode@entry=513) at /usr/src/libexec/ld.elf_so/rtld.c:1090
1090	{
+c
Continuing.

Breakpoint 2.2, dlopen (name=name@entry=0x7f7fff6f2b70 "nss_files.so.0", mode=mode@entry=513) at /usr/src/libexec/ld.elf_so/rtld.c:1090
1090	{
+c
Continuing.

Breakpoint 2.2, dlopen (name=name@entry=0x7f7fff6f2b70 "nss_dns.so.0", mode=mode@entry=513) at /usr/src/libexec/ld.elf_so/rtld.c:1090
1090	{
+c
Continuing.

Breakpoint 3, atexit (func=0xe76dda <ffDestroyInstance>) at /usr/src/lib/libc/stdlib/atexit.c:265
265		return (__cxa_atexit_internal((void (*)(void *))func, NULL, NULL));
+bt
#0 atexit (func=0xe76dda <ffDestroyInstance>) at /usr/src/lib/libc/stdlib/atexit.c:265 #1 0x0000000000e6df7b in main (argc=1, argv=0x7f7fff6f39f8) at /home/ansible/pkgsrc/sysutils/fastfetch/work/fastfetch-2.64.2/src/fastfetch.c:833
+c
Continuing.

Breakpoint 2.2, dlopen (name=0x11b02d5 "libxcb-randr.so", mode=1) at /usr/src/libexec/ld.elf_so/rtld.c:1090
1090	{
+c
Continuing.

Breakpoint 2.2, dlopen (name=0x11b0f6b "libXrandr.so", mode=1) at /usr/src/libexec/ld.elf_so/rtld.c:1090
1090	{
+c
Continuing.

Breakpoint 2.2, dlopen (name=0x11af6b4 "libdrm.so", mode=1) at /usr/src/libexec/ld.elf_so/rtld.c:1090
1090	{
+c
Continuing.

Breakpoint 2.2, dlopen (name=0x114afd1 "libEGL.so", mode=1) at /usr/src/libexec/ld.elf_so/rtld.c:1090
1090	{
+c
Continuing.

Breakpoint 3, atexit (func=func@entry=0x7adb3ea9be60 <_eglAtExit>) at /usr/src/lib/libc/stdlib/atexit.c:265
265		return (__cxa_atexit_internal((void (*)(void *))func, NULL, NULL));

+bt
#0 atexit (func=func@entry=0x7adb3ea9be60 <_eglAtExit>) at /usr/src/lib/libc/stdlib/atexit.c:265 #1 0x00007adb3ea9bf33 in _eglAddAtExitCall (func=func@entry=0x7adb3eaa9f7c <_eglFiniTSD>) at /usr/xsrc/external/mit/MesaLib/dist/src/egl/main/eglglobals.c:142 #2 0x00007adb3eaaa05a in _eglInitTSD () at /usr/xsrc/external/mit/MesaLib/dist/src/egl/main/eglcurrent.c:94 #3 _eglCheckedGetTSD () at /usr/xsrc/external/mit/MesaLib/dist/src/egl/main/eglcurrent.c:151 #4 _eglGetCurrentThread () at /usr/xsrc/external/mit/MesaLib/dist/src/egl/main/eglcurrent.c:170 #5 0x00007adb3ea9d7cb in _eglSetFuncName (object=0x0, objectType=12344, disp=0x0, funcName=0x7adb3eab0f70 <__func__.42> "eglGetProcAddress") at /usr/xsrc/external/mit/MesaLib/dist/src/egl/main/eglapi.c:270 #6 eglGetProcAddress (procname=0x114af30 "glGetString") at /usr/xsrc/external/mit/MesaLib/dist/src/egl/main/eglapi.c:2732 #7 0x0000000000e93ff1 in eglHandleData (result=0x7f7fff6f3130, data=0x7f7fff6f3030) at /home/ansible/pkgsrc/sysutils/fastfetch/work/fastfetch-2.64.2/src/detection/opengl/opengl_shared.c:137 #8 0x0000000000e943f8 in ffOpenGLDetectByEGL (result=0x7f7fff6f3130) at /home/ansible/pkgsrc/sysutils/fastfetch/work/fastfetch-2.64.2/src/detection/opengl/opengl_shared.c:206 #9 0x0000000001069c9b in ffDetectOpenGL (options=0x7f7fff6f3180, result=0x7f7fff6f3130) at /home/ansible/pkgsrc/sysutils/fastfetch/work/fastfetch-2.64.2/src/detection/opengl/opengl_linux.c:183 #10 0x0000000000e9151c in detectByOpenGL (gpus=0x7f7fff6f3290) at /home/ansible/pkgsrc/sysutils/fastfetch/work/fastfetch-2.64.2/src/detection/gpu/gpu.c:92 #11 0x0000000000e919cd in ffDetectGPU (options=0x7f7fff6f35e0, result=0x7f7fff6f3290) at /home/ansible/pkgsrc/sysutils/fastfetch/work/fastfetch-2.64.2/src/detection/gpu/gpu.c:197 #12 0x0000000000f12119 in ffPrintGPU (options=0x7f7fff6f35e0) at /home/ansible/pkgsrc/sysutils/fastfetch/work/fastfetch-2.64.2/src/modules/gpu/gpu.c:169 #13 0x0000000000e71a80 in parseStructureCommand (data=0x7f7fff6f3950, line=0x7adb3ed4527d "GPU", fn=0xe70be3 <genJsonResult>) at /home/ansible/pkgsrc/sysutils/fastfetch/work/fastfetch-2.64.2/src/common/impl/commandoption.c:183 #14 0x0000000000e72969 in ffPrintCommandOption (data=0x7f7fff6f3950) at /home/ansible/pkgsrc/sysutils/fastfetch/work/fastfetch-2.64.2/src/common/impl/commandoption.c:218 #15 0x0000000000e6d5c1 in run (data=0x7f7fff6f3950) at /home/ansible/pkgsrc/sysutils/fastfetch/work/fastfetch-2.64.2/src/fastfetch.c:764 #16 0x0000000000e6e08b in main (argc=1, argv=0x7f7fff6f39f8) at /home/ansible/pkgsrc/sysutils/fastfetch/work/fastfetch-2.64.2/src/fastfetch.c:854

+frame 1
#1 0x00007adb3ea9bf33 in _eglAddAtExitCall (func=func@entry=0x7adb3eaa9f7c <_eglFiniTSD>) at /usr/xsrc/external/mit/MesaLib/dist/src/egl/main/eglglobals.c:142
142	         atexit(_eglAtExit);

+l
137	
138	#if defined(HAVE_NOATEXIT)
139	      registered = EGL_TRUE;
140	#else
141	      if (!registered) {
142	         atexit(_eglAtExit);
143	         registered = EGL_TRUE;
144	      }
145	#endif
146	


To me it looks like error that macro HAVE_NOATEXIT is not actually defined (but should be) - so atexit(3) is called accidentally.

References:
* https://cvsweb.netbsd.org/bsdweb.cgi/xsrc/external/mit/MesaLib/dist/src/egl/main/eglglobals.c.diff?r1=1.7;r2=1.8;f=h
* https://marc.info/?t=176604443000001&r=1&w=2
* https://gnats.netbsd.org/cgi-bin/query-pr-single.pl?number=60025

Best regards
  --Henryk Paluch


Home | Main Index | Thread Index | Old Index