sigsegv in vlc_module_load of opengl on wayland
System configuration:
~ $ head -n 2 /etc/os-release
NAME=Fedora
VERSION="34 (Thirty Four)"
~ $ vlc --version
VLC media player 3.0.17.2 Vetinari (revision )
I use Sway (Wayland).
VLC crashes when started to open a file from my file manager (thunar). Some info from the core dump:
~ $ coredumpctl debug /usr/bin/vlc
PID: 54153 (vlc)
UID: 1000 (enedil)
GID: 1000 (enedil)
Signal: 11 (SEGV)
Timestamp: Sun 2022-04-03 18:41:36 CEST (1h 21min ago)
Command Line: vlc /home/enedil/Filmy/moviename.mkv
Executable: /usr/bin/vlc
Control Group: /user.slice/user-1000.slice/user@1000.service/app.slice/app-glib-userapp\x2drunvlc\x2d3LKSJ1-54153.scope
Unit: user@1000.service
User Unit: app-glib-userapp\x2drunvlc\x2d3LKSJ1-54153.scope
Slice: user-1000.slice
Owner UID: 1000 (enedil)
Boot ID: 01899af5aad2419f82d81e00e998b241
Machine ID: 7a9575bfe79c4b1c9a3c46126a511760
Hostname: fedora
Storage: /var/lib/systemd/coredump/core.vlc.1000.01899af5aad2419f82d81e00e998b241.54153.1649004096000000.zst (present)
Disk Size: 5.6M
And here's backtrace:
gef➤ bt
#0 __GI___pthread_mutex_lock (mutex=0xe8) at ../nptl/pthread_mutex_lock.c:67
#1 0x00007f42e0c06215 in wl_proxy_create_wrapper (proxy=0x7f42c8279d90) at ../src/wayland-client.c:2377
#2 0x00007f42b8233b64 in dri2_wl_create_window_surface () at /lib64/libEGL_mesa.so.0
#3 0x00007f42b821c9b0 in _eglCreateWindowSurfaceCommon () at /lib64/libEGL_mesa.so.0
#4 0x00007f42640ba82d in CreateWindowSurfaceEXT (attrs=0x0, window=0x7f42b0003770, config=0x7f42c8316790, dpy=0x7f42c8140bb0) at video_output/opengl/egl.c:188
#5 Open (obj=0x7f42b00020c0, api=0x7f42640bb240 <api>) at video_output/opengl/egl.c:376
#6 0x00007f42ef96d72b in module_load (obj=obj@entry=0x7f42b00020c0, m=m@entry=0x56203fafc3c0, init=init@entry=0x7f42ef9690c0 <generic_start>, args=args@entry=0x7f42641cf530) at modules/modules.c:183
#7 0x00007f42ef96f403 in vlc_module_load (obj=0x7f42b00020c0, capability=0x7f42ef9f51e3 "opengl", name=0x7f42ef9e41cb "", strict=<optimized out>, probe=0x7f42ef9690c0 <generic_start>) at modules/modules.c:279
#8 0x00007f42ef9a948a in vlc_gl_Create (wnd=wnd@entry=0x7f42340ec680, flags=flags@entry=0x0, name=0x7f42640c938f "$gl") at video_output/opengl.c:74
#9 0x00007f42640c5fcf in Open (obj=0x7f42b0000f00) at video_output/opengl/display.c:133
#10 0x00007f42ef96d72b in module_load (obj=obj@entry=0x7f42b0000f00, m=m@entry=0x56203fafd4e0, init=init@entry=0x7f42ef9690c0 <generic_start>, args=args@entry=0x7f42641cf7e0) at modules/modules.c:183
#11 0x00007f42ef96f403 in vlc_module_load (obj=0x7f42b0000f00, capability=0x7f42ef9e36f6 "vout display", name=0x7f42ef9e41cb "", strict=<optimized out>, probe=0x7f42ef9690c0 <generic_start>) at modules/modules.c:279
#12 0x00007f42ef9e0086 in vout_display_New (owner=<synthetic pointer>, cfg=0x7f42b0004210, fmt=0x7f4234046120, load_module=0xff, module=0x7f42ef9f51f5 "$vout", obj=0x7f42b0000f00) at video_output/display.c:109
#13 DisplayNew.constprop.0 (vout=vout@entry=0x7f42340460e0, source=source@entry=0x7f4234046120, state=state@entry=0x7f42641cfa30, module=module@entry=0x7f42ef9f51f5 "$vout", is_splitter=is_splitter@entry=0x0, hide_timeout=hide_timeout@entry=0xf4240, owner_ptr=0x0, double_click_timeout=0x493e0) at video_output/display.c:1198
#14 0x00007f42ef9a9d73 in vout_NewDisplay (module=0x7f42ef9f51f5 "$vout", double_click_timeout=0x493e0, hide_timeout=<optimized out>, state=0x7f42641cfa30, source=<optimized out>, vout=0x7f42340460e0) at video_output/display.c:1248
#15 vout_OpenWrapper (state=0x7f42641cfa30, splitter_name=0x0, vout=0x7f42340460e0) at video_output/vout_wrapper.c:67
#16 ThreadStart (vout=0x7f42340460e0, state=0x7f42641cfa30) at video_output/video_output.c:1531
#17 0x00007f42ef9b23f1 in ThreadControl (cmd=..., vout=0x7f42340460e0) at video_output/video_output.c:1686
#18 Thread (object=0x7f42340460e0) at video_output/video_output.c:1807
#19 0x00007f42efc062a5 in start_thread (arg=0x7f42641d0640) at pthread_create.c:481
#20 0x00007f42efb27323 in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95
gef➤ fr 1
#1 0x00007f42e0c06215 in wl_proxy_create_wrapper (proxy=0x7f42c8279d90) at ../src/wayland-client.c:2377
2377 pthread_mutex_lock(&wrapped_proxy->display->mutex);
gef➤ l
2372
2373 wrapper = zalloc(sizeof *wrapper);
2374 if (!wrapper)
2375 return NULL;
2376
2377 pthread_mutex_lock(&wrapped_proxy->display->mutex);
2378
2379 wrapper->object.interface = wrapped_proxy->object.interface;
2380 wrapper->object.id = wrapped_proxy->object.id;
2381 wrapper->version = wrapped_proxy->version;
gef➤ p *wrapped_proxy
$6 = {
object = {
interface = 0x0,
implementation = 0x7f42c83788b0,
id = 0x0
},
display = 0x0,
queue = 0x7f42c818eb90,
flags = 0xc837cf10,
refcount = 0x7f42,
user_data = 0x7f42c8000d30,
dispatcher = 0x7f42c8334f10,
version = 0x0,
tag = 0x100000001
}
This is called from mesa code, however the mesa code seems to just pass around the wrapped_proxy pointer, which gets allocated by VLC in vlc_module_load. I'm not sure if it's an issue in VLC or in libwayland or in mesa, so please redirect me if needed. I'm happy to provide more info if asked.