Skip to content

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.

To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information