Proof Portal
Omarchy
ProbeLabs65 findings · 95 requirementsA proof layer — requirements, tests and verified fixes — for two of Omarchy's subsystems: the application menu (launcher scripts, QML model, JSONC config, search and selection) and the lock screen (lock scripts, QML, PAM authentication). Scope is deliberately limited to those components of omacom/omarchy; the rest of the distribution is not covered.
[Bug] Chromium main process SIGTRAPs on VM close (VM teardown triggers gpu_data_manager fatal CHECK)
Reported by drumguy1384 · filed Aug 31, 2026 · open at source
At a glance
- 1 · What is claimed?
- Only the report text below — no validator has restated it as checkable claims yet.
- 2 · What does it affect?
- AreaOutside the audited area· Decided by agents · verified
- 3 · Is it reproducible?
- No validation has been run yet.
- 4 · What remains unclear?
- Not validated yet: no claims, no reproducer.
- 5 · What happens next?
- Decided by agents and verified by a second, independent agent — see the decision.
Original report
Summary
Closing a libvirt/QEMU VM (win11) causes the main Chromium browser process to die with SIGTRAP (internal CHECK failure) at the exact moment the VM's systemd scope deactivates. All Chromium windows close instantly.
Environment
- Distro: Arch Linux (Omarchy)
- Window Manager: Hyprland (via uwsm)
- Chromium:
chromium 151.0.7922.173-1(Arch package) - Mesa:
mesa 1:26.2.1-1 - VM: libvirt/QEMU, Windows 11 guest
- VM Graphics:
virtio-vga-gl+egl-headlesswith<gl rendernode='/dev/dri/renderD128'/> - GPU: AMD Radeon RX 6700 XT (renderD128)
Steps to Reproduce
- Start Chromium (multiple windows/tabs)
- Start a libvirt VM with
virtio-vga-gl+egl-headless+rendernode=/dev/dri/renderD128 - Close the VM (shutdown or poweroff)
- Observe: All Chromium windows vanish instantly at the exact second
machine-qemu-*-win11.scope: Deactivated
Evidence
- Signal:
SIGTRAP(5),si_code=SI_KERNEL— internalCHECKfailure - Process: Main browser (
/usr/lib/chromium/chromium— no--type=) - Stack:
ChromeMain→ glib main loop →gpu_data_manager_impl_private.cc:417 - Fatal message:
"GPU process isn't usable. Goodbye." - Timing: Identical to
machine-qemu-*-win11.scope: Deactivated(same second)
What Has Been Ruled Out
| Hypothesis | Test | Result |
|---|---|---|
CAC hook pkill | Fixed hook to child-only + dedupe | Still crashes before hook's release op runs |
| Mesa/GPU sharing | VM moved to plain virtio-vga (no egl-headless) | Still crashes |
| CAC/OpenSC USB | Disabled opensc-pkcs11.so in NSS | Still crashes (VM even picked up CAC fine) |
| GPU process | --disable-gpu, then SwiftShader (--use-gl=angle --use-angle=swiftshader) | Still crashes |
vm.max_map_count | Already at 1,048,576 | N/A |
| Clock/time | No adjtimex/NTP step at crash moment | N/A |
Key Observations
- Crash is main browser process (no
--type=), not a renderer/GPU child SIGTRAPwithSI_KERNEL= kernel-delivered fatalCHECKassertion- Occurs at VM scope deactivation — before libvirt hooks run their
releasephase - Stack trace consistently shows
ChromeMain→ glib main loop →gpu_data_manager_impl_private.cc 07:51SIGILL renderer crash occurred with no VM running — Chromium has baseline instability on this stack
VM Configuration (Relevant Portion)
<graphics type='egl-headless'>
<gl rendernode='/dev/dri/renderD128'/>
</graphics>
<video>
<model type='virtio' heads='1' primary='yes' device='virtio-vga-gl'>
<acceleration accel3d='yes'/>
</model>
</video>Workaround Attempted
- Moving VM to
virtio-vga(SPICE only, no egl-headless) did not fix it --disable-gpuand SwiftShader (--use-gl=angle --use-angle=swiftshader --enable-unsafe-swiftshader) did not fix it
Request
This appears to be a fundamental interaction between VM teardown (cgroup/PCI/kernel event at scope deactivation) and Chromium's GpuDataManagerImpl fatal fallback path. The CHECK at gpu_data_manager_impl_private.cc:417 fires when the GPU process is deemed "not usable" — but this happens even with software GL, suggesting the trigger is a kernel/cgroup event during VM scope teardown that Chromium's GPU data manager interprets as GPU loss.
Possible areas to investigate:
1. Chromium's GpuDataManagerImpl handling of GPU process termination during system cgroup changes
2. Hyprland/uwsm session handling of XWayland restarts during VM teardown
3. libvirt's cgroup/PCI teardown sequence affecting GPU process visibility
View raw text
## Summary
Closing a libvirt/QEMU VM (win11) causes the **main Chromium browser process** to die with `SIGTRAP` (internal `CHECK` failure) at the exact moment the VM's systemd scope deactivates. All Chromium windows close instantly.
## Environment
- **Distro**: Arch Linux (Omarchy)
- **Window Manager**: Hyprland (via uwsm)
- **Chromium**: `chromium 151.0.7922.173-1` (Arch package)
- **Mesa**: `mesa 1:26.2.1-1`
- **VM**: libvirt/QEMU, Windows 11 guest
- **VM Graphics**: `virtio-vga-gl` + `egl-headless` with `<gl rendernode='/dev/dri/renderD128'/>`
- **GPU**: AMD Radeon RX 6700 XT (renderD128)
## Steps to Reproduce
1. Start Chromium (multiple windows/tabs)
2. Start a libvirt VM with `virtio-vga-gl` + `egl-headless` + `rendernode=/dev/dri/renderD128`
3. Close the VM (shutdown or poweroff)
4. Observe: **All Chromium windows vanish instantly** at the exact second `machine-qemu-*-win11.scope: Deactivated`
## Evidence
- **Signal**: `SIGTRAP` (5), `si_code=SI_KERNEL` — internal `CHECK` failure
- **Process**: Main browser (`/usr/lib/chromium/chromium` — no `--type=`)
- **Stack**: `ChromeMain` → glib main loop → `gpu_data_manager_impl_private.cc:417`
- **Fatal message**: `"GPU process isn't usable. Goodbye."`
- **Timing**: Identical to `machine-qemu-*-win11.scope: Deactivated` (same second)
## What Has Been Ruled Out
| Hypothesis | Test | Result |
|------------|------|--------|
| CAC hook `pkill` | Fixed hook to child-only + dedupe | Still crashes **before** hook's `release` op runs |
| Mesa/GPU sharing | VM moved to plain `virtio-vga` (no egl-headless) | Still crashes |
| CAC/OpenSC USB | Disabled `opensc-pkcs11.so` in NSS | Still crashes (VM even picked up CAC fine) |
| GPU process | `--disable-gpu`, then SwiftShader (`--use-gl=angle --use-angle=swiftshader`) | Still crashes |
| `vm.max_map_count` | Already at 1,048,576 | N/A |
| Clock/time | No `adjtimex`/NTP step at crash moment | N/A |
## Key Observations
1. Crash is **main browser process** (no `--type=`), not a renderer/GPU child
2. `SIGTRAP` with `SI_KERNEL` = kernel-delivered fatal `CHECK` assertion
3. Occurs at **VM scope deactivation** — before libvirt hooks run their `release` phase
4. Stack trace consistently shows `ChromeMain` → glib main loop → `gpu_data_manager_impl_private.cc`
5. `07:51` SIGILL renderer crash occurred **with no VM running** — Chromium has baseline instability on this stack
## VM Configuration (Relevant Portion)
```xml
<graphics type='egl-headless'>
<gl rendernode='/dev/dri/renderD128'/>
</graphics>
<video>
<model type='virtio' heads='1' primary='yes' device='virtio-vga-gl'>
<acceleration accel3d='yes'/>
</model>
</video>
```
## Workaround Attempted
- Moving VM to `virtio-vga` (SPICE only, no egl-headless) did **not** fix it
- `--disable-gpu` and SwiftShader (`--use-gl=angle --use-angle=swiftshader --enable-unsafe-swiftshader`) did **not** fix it
## Request
This appears to be a fundamental interaction between VM teardown (cgroup/PCI/kernel event at scope deactivation) and Chromium's `GpuDataManagerImpl` fatal fallback path. The `CHECK` at `gpu_data_manager_impl_private.cc:417` fires when the GPU process is deemed "not usable" — but this happens even with software GL, suggesting the trigger is a kernel/cgroup event during VM scope teardown that Chromium's GPU data manager interprets as GPU loss.
**Possible areas to investigate:**
1. Chromium's `GpuDataManagerImpl` handling of GPU process termination during system cgroup changes
2. Hyprland/uwsm session handling of XWayland restarts during VM teardown
3. libvirt's cgroup/PCI teardown sequence affecting GPU process visibility
Validation
Not checked yet. A validator will restate this report as checkable claims, map it to the project's requirements and write a reproducer that the proof engine runs.
Linked
Not linked to any known issue, other report or change yet.
Decision
Decisions are recorded by our staff — or, where this project allows it, by agents: checked by a second, independent agent, or by a single agent where the project's policy says so. Any decision reached so far is shown below.
- Out of scopeDecided by agents · verified · 2026-10-09 10:21 UTC