With a Steam Frame over VRLink, starting SteamVR goes wrong in the same way each time. The first vrcompositor exits silently about 15 ms after "Startup Complete" (no core dump, no breakpad dump, no NVIDIA Xid). When a game is launched into that state, the replacement compositor fails with VRInitError_Compositor_CreateDriverDirectModeResolveTextures. vrserver then segfaults on a null pointer dereference in driver_vrlink.so+0xc9950, on its vrcomp thread.
This happened twice on SteamVR 2.17.10 with an identical stack and fault address. Relaunching the game right afterwards worked both times.
Steps to reproduce
Start SteamVR while the Frame is still showing as Disconnected VRLink Headset (vrlink activates the headset and controllers about 0.7s later).
vrcompositor starts, creates its 3240x3240 swap texture sets, logs Startup Complete, and disconnects about 15 ms later without logging an error.
vrserver logs 12x Failed to unref VRCompositor resource 0x{2..d}00xxxxxx.
About 30s later, launch a game (Half-Life: Alyx in both cases). vrserver starts a new vrcompositor.
22:07:36.433 vrserver Driver 'vrlink' started activation of tracked device with serial number 'Disconnected VRLink Headset'
22:07:37.134 vrserver vrlink activates headset + 2 controllers
22:07:37.937 vrcompositor Creating systemlayer textures (w=3240,h=3240)
22:07:38.008 vrcompositor Startup Complete (0.368557 seconds)
22:07:38.024 vrserver Process 2862433: vrcompositor disconnected <-- no error logged by the compositor
22:07:38.025 vrserver Failed to unref VRCompositor resource 0x7002bad61 (x12, 0x2..0xd)
22:08:08.107 vrserver New Connect message from .../Half-Life Alyx/game/bin/linuxsteamrt64/hlvr (VRApplication_Scene)
22:08:08.773 vrcompositor Creating systemlayer textures (w=3240,h=3240)
22:08:08.821 vrcompositor Failed to create cursor overlay (x3)
22:08:08.822 vrcompositor Failed to initialize compositor post-ipc.
22:08:08.822 vrcompositor Failed to start compositor: VRInitError_Compositor_CreateDriverDirectModeResolveTextures
22:08:08.923 vrserver Process 2863287: vrcompositor disconnected
22:08:09 kernel vrcomp[2863362]: segfault at 0 ip 000075f2d6cc9950 ... in driver_vrlink.so[c8950,75f2d6c76000+19a000]
The 00:17–00:18 occurrence follows the same sequence:
First compositor: Startup Complete at 00:17:21.236, disconnected at 00:17:21.249.
hlvr connected at 00:18:08.
CreateDriverDirectModeResolveTextures at 00:18:09.002.
vrserver segfault at 00:18:09.
Before that run, the compositor had failed to allocate the 3240x3240 shared image while supersampling was set to 1.5x. Forcing the render scale to 1.0 did not change the outcome, so the resolution itself does not seem to be the cause.
Crash details
Both crashes have the same stack. Thread name vrcomp, frames are offsets into the named binaries:
The faulting instruction is mov (%rdi),%rax with rdi == 0. The code loads an object pointer from a list entry and then reads that object's vtable, so a null object pointer is being dereferenced. Judging by the code that follows, it compares the vtable slot against a known function, which looks like a devirtualization check. My guess is that this is an entry for a resource or swap texture set left behind by the compositor that failed.
I switched to the beta branch (2.18.2, vrlink 0.4.3 20260930.6234839) afterwards. In one session on 2.18.2, the first compositor stayed up and Half-Life: Alyx launched without this crash. So this may already be fixed in the beta. Even so, the vrserver null dereference after a compositor init failure seems worth checking regardless of how the compositor failed. I'll update here if it happens again on 2.18.2.
System information
SteamVR 2.17.10 (stable) when these crashes happened; now on 2.18.2 beta
Headset: Steam Frame via Frame Wi-Fi dongle (28de:2432, rtw89_8852cu)
Compositor: Hyprland 0.56.2, Wayland. vrcompositor logs CHmdWindowSDL: Using Wayland and leases the HMD via wp_drm_lease_device_v1. Hyprland logged no protocol errors.
Legacy Steam Runtime (app 4032350) installed; the outcome was the same before and after installing it.
Launch options: QT_QPA_PLATFORM=xcb %command%
Related: #990 (a vrcompositor use-after-free during shutdown on 2.18.2, possibly the same resource-lifetime area).
A SteamVR system report and core dumps are available on request.
Describe the bug
With a Steam Frame over VRLink, starting SteamVR goes wrong in the same way each time. The first vrcompositor exits silently about 15 ms after "Startup Complete" (no core dump, no breakpad dump, no NVIDIA Xid). When a game is launched into that state, the replacement compositor fails with
VRInitError_Compositor_CreateDriverDirectModeResolveTextures. vrserver then segfaults on a null pointer dereference indriver_vrlink.so+0xc9950, on itsvrcompthread.This happened twice on SteamVR 2.17.10 with an identical stack and fault address. Relaunching the game right afterwards worked both times.
Steps to reproduce
Disconnected VRLink Headset(vrlink activates the headset and controllers about 0.7s later).Startup Complete, and disconnects about 15 ms later without logging an error.Failed to unref VRCompositor resource 0x{2..d}00xxxxxx.Timeline (2026-10-04 22:07–22:08, SteamVR 2.17.10)
The 00:17–00:18 occurrence follows the same sequence:
CreateDriverDirectModeResolveTexturesat 00:18:09.002.Before that run, the compositor had failed to allocate the 3240x3240 shared image while supersampling was set to 1.5x. Forcing the render scale to 1.0 did not change the outcome, so the resolution itself does not seem to be the cause.
Crash details
Both crashes have the same stack. Thread name
vrcomp, frames are offsets into the named binaries:The kernel reported the same fault both times:
The faulting instruction is
mov (%rdi),%raxwithrdi == 0. The code loads an object pointer from a list entry and then reads that object's vtable, so a null object pointer is being dereferenced. Judging by the code that follows, it compares the vtable slot against a known function, which looks like a devirtualization check. My guess is that this is an entry for a resource or swap texture set left behind by the compositor that failed.Breakpad IDs:
bp-133fe00d-e1a5-45ad-89f2-dbbe92261004(vrserver),bp-cf6c7fee-3fde-4729-ad36-be5572261004(assert).Status on 2.18.2 beta
I switched to the
betabranch (2.18.2, vrlink 0.4.3 20260930.6234839) afterwards. In one session on 2.18.2, the first compositor stayed up and Half-Life: Alyx launched without this crash. So this may already be fixed in the beta. Even so, the vrserver null dereference after a compositor init failure seems worth checking regardless of how the compositor failed. I'll update here if it happens again on 2.18.2.System information
CHmdWindowSDL: Using Waylandand leases the HMD viawp_drm_lease_device_v1. Hyprland logged no protocol errors.QT_QPA_PLATFORM=xcb %command%Related: #990 (a vrcompositor use-after-free during shutdown on 2.18.2, possibly the same resource-lifetime area).
A SteamVR system report and core dumps are available on request.