Proof Portal

Project overview

Omarchy

ProbeLabs65 findings · 95 requirements

A 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.

Inbox
ReportR-1117GitHub issuePublicReceived

Quickshell SIGSEGV in QFactoryLoader::metaDataKeys after hibernate resume when opening omarchy-menu

Reported by igor-gorohovsky · filed Sep 1, 2026 · open at source

Received. Triage checks are recorded; not validated yet.

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?
Not yet mapped to any requirement or component.
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?
Our staff decide whether the report is valid. Where this project allows it, agents decide whether it duplicates another report or a known issue. So far: matches no known issue — decided by agents · verified. The outcome (valid, duplicate, not a bug, …) is not decided yet. See the decision.

Original report

Quickshell SIGSEGV in QFactoryLoader::metaDataKeys after hibernate resume when opening omarchy-menurevision 1 · captured 2026-09-28 21:24 UTC via poll

What happened

The Omarchy shell (quickshell -n -p /usr/share/omarchy/shell) SIGSEGV'd 15 seconds after resume from hibernate, while opening omarchy-menu. Quickshell's crash handler caught the fault and re-raised it (si_code: SI_TKILL). The shell auto-restarted; no user data was lost.

This is a one-off of this stack on this machine. Earlier local quickshell dumps are a different karaoke IdleInhibitor destructor and a session-lock abort.

Expected

Opening the Omarchy menu after hibernate resume should load app icons without killing the shell.

Steps to reproduce

Not confirmed as 100% reliable (this stack has happened once here), but the timeline is tight:

  1. Hibernate the machine (this session slept ~14h).
  2. Resume.
  3. Within ~15 seconds, open the Omarchy menu.
  4. Shell dies in QQuickPixmapReader while decoding an app icon.

On this machine the job in flight was:

/usr/share/icons/hicolor/scalable/apps/one.alynx.showmethekey.svg

(showmethekey 1.21.0-1). The file is a normal intact SVG; the crash is not a corrupt icon.

Stack (symbolized)

Crashing thread is Qt's QQuickPixmapReader. The original fault is QIODevice::read(this=0x1) — a garbage device pointer, not a typical heap UAF address — while QFactoryLoader parses static plugin CBOR metadata to satisfy QImageReader::imageCount().

#3  qs::crash::signalHandler (sig=11) at quickshell/src/crash/handler.cpp:93
#4  <signal handler called>
#5–#8  QIODevice::read (this=0x1, maxSize=46)   at qtbase/src/corelib/io/qiodevice.cpp:1003
#9–#14 QCborStreamReader::readAllString()      at qtbase/src/corelib/serialization/qcborstreamreader.cpp
#15–#18 iterateInPluginMetaData / QFactoryLoaderMetaDataKeysExtractor
#19 QFactoryLoader::metaDataKeys()             at qtbase/src/corelib/plugin/qfactoryloader.cpp:537
#20 QFactoryLoader::keyMap()                   at qtbase/src/corelib/plugin/qfactoryloader.cpp:596
#23 QImageReader::imageCount() const
#24 readImage(...)                             at qtdeclarative/.../qquickpixmapcache.cpp:512
#25 QQuickPixmapReader::processJob (...)
        localFile = "/usr/share/icons/hicolor/scalable/apps/one.alynx.showmethekey.svg"
#26 QQuickPixmapReader::processJobs
#41 QQuickPixmapReader::run

The systemd-coredump contains only this LWP (the pixmap-reader thread). Other in-flight work is not in the dump.

Last Quickshell log line before the crash:

DEBUG quickshell.hyprland.ipc.events: Received event: "openlayer>>omarchy-menu"

plugins/menu/Menu.qml loads those icons with a normal Image { asynchronous: true; source: appLibrary.iconSource(...) }.

What this is / is not

Proved: the SIGSEGV is inside Qt 6.11.2 (QFactoryLoader / QCborStreamReader), hosted by Omarchy's bundled shell, triggered by menu icon decode after hibernate resume.

Not proved: whether hibernate left plugin-metadata state corrupt, or the menu's burst of icon loads just hit a latent Qt bug. The dump cannot distinguish those.

Not the same as:

  • #7098 — omarchy-menu crash, but QML JIT while typing
  • #8026 — same QQuickPixmapReader thread, but OpenSSL while loading HTTPS album art

The immediate fault is in Qt; the user-facing trigger is Omarchy's shell/menu. Filing here because this is the Omarchy-shipped Quickshell config (/usr/share/omarchy/shell).

System details

  • omarchy version: 4.0.2-1
  • Kernel: 7.1.9-arch1-2
  • Hyprland 0.56.2-1
  • quickshell 0.3.1-1
  • qt6-base 6.11.2-2, qt6-declarative 6.11.2-1, qt6-svg 6.11.2-1, qt6-imageformats 6.11.2-1
  • GPU: AMD Radeon RX 9070 XT (amdgpu, Navi 48), MODE1 reset on this resume
  • CPU: AMD Ryzen 9 5900X
  • Desktop: Gigabyte X570 AORUS MASTER, Wayland / Hyprland, 3840x2160

omarchy-debug --no-sudo --print was run at 2026-09-01 10:56 EEST and wrote /tmp/omarchy-debug.log (113 KiB). Relevant excerpt:

Hostname: omarchy
Omarchy Package: omarchy 4.0.2-1
Kernel 7.1.9-arch1-2 x86_64
Desktop Hyprland v 0.56.2  Distro Omarchy
Machine: Desktop  Gigabyte X570 AORUS MASTER
CPU: AMD Ryzen 9 5900X  12 cores / 24 threads
Graphics: AMD Navi 48 [Radeon RX 9070/9070 XT] driver amdgpu
Display: wayland  compositor Hyprland 0.56.2  Monitor DP-3 3840x2160
Memory: 32 GiB

Quickshell's own crash report is at ~/.cache/quickshell/crashes/p619ajmkt/ (report.txt + log.qslog.log). systemd-coredump pid 287958.

Filed by Grok 4.6 via Grok Build.

View raw text
## What happened

The Omarchy shell (`quickshell -n -p /usr/share/omarchy/shell`) SIGSEGV'd 15 seconds after resume from hibernate, while opening `omarchy-menu`. Quickshell's crash handler caught the fault and re-raised it (`si_code: SI_TKILL`). The shell auto-restarted; no user data was lost.

This is a one-off of this stack on this machine. Earlier local quickshell dumps are a different karaoke `IdleInhibitor` destructor and a session-lock abort.

## Expected

Opening the Omarchy menu after hibernate resume should load app icons without killing the shell.

## Steps to reproduce

Not confirmed as 100% reliable (this stack has happened once here), but the timeline is tight:

1. Hibernate the machine (this session slept ~14h).
2. Resume.
3. Within ~15 seconds, open the Omarchy menu.
4. Shell dies in `QQuickPixmapReader` while decoding an app icon.

On this machine the job in flight was:

```
/usr/share/icons/hicolor/scalable/apps/one.alynx.showmethekey.svg
```

(`showmethekey 1.21.0-1`). The file is a normal intact SVG; the crash is not a corrupt icon.

## Stack (symbolized)

Crashing thread is Qt's `QQuickPixmapReader`. The original fault is `QIODevice::read(this=0x1)` — a garbage device pointer, not a typical heap UAF address — while `QFactoryLoader` parses **static plugin** CBOR metadata to satisfy `QImageReader::imageCount()`.

```
#3  qs::crash::signalHandler (sig=11) at quickshell/src/crash/handler.cpp:93
#4  <signal handler called>
#5–#8  QIODevice::read (this=0x1, maxSize=46)   at qtbase/src/corelib/io/qiodevice.cpp:1003
#9–#14 QCborStreamReader::readAllString()      at qtbase/src/corelib/serialization/qcborstreamreader.cpp
#15–#18 iterateInPluginMetaData / QFactoryLoaderMetaDataKeysExtractor
#19 QFactoryLoader::metaDataKeys()             at qtbase/src/corelib/plugin/qfactoryloader.cpp:537
#20 QFactoryLoader::keyMap()                   at qtbase/src/corelib/plugin/qfactoryloader.cpp:596
#23 QImageReader::imageCount() const
#24 readImage(...)                             at qtdeclarative/.../qquickpixmapcache.cpp:512
#25 QQuickPixmapReader::processJob (...)
        localFile = "/usr/share/icons/hicolor/scalable/apps/one.alynx.showmethekey.svg"
#26 QQuickPixmapReader::processJobs
#41 QQuickPixmapReader::run
```

The systemd-coredump contains only this LWP (the pixmap-reader thread). Other in-flight work is not in the dump.

Last Quickshell log line before the crash:

```
DEBUG quickshell.hyprland.ipc.events: Received event: "openlayer>>omarchy-menu"
```

`plugins/menu/Menu.qml` loads those icons with a normal `Image { asynchronous: true; source: appLibrary.iconSource(...) }`.

## What this is / is not

**Proved:** the SIGSEGV is inside Qt 6.11.2 (`QFactoryLoader` / `QCborStreamReader`), hosted by Omarchy's bundled shell, triggered by menu icon decode after hibernate resume.

**Not proved:** whether hibernate left plugin-metadata state corrupt, or the menu's burst of icon loads just hit a latent Qt bug. The dump cannot distinguish those.

Not the same as:

- #7098 — omarchy-menu crash, but QML JIT while typing
- #8026 — same `QQuickPixmapReader` thread, but OpenSSL while loading HTTPS album art

The immediate fault is in Qt; the user-facing trigger is Omarchy's shell/menu. Filing here because this is the Omarchy-shipped Quickshell config (`/usr/share/omarchy/shell`).

## System details

- `omarchy version`: 4.0.2-1
- Kernel: 7.1.9-arch1-2
- Hyprland 0.56.2-1
- quickshell 0.3.1-1
- qt6-base 6.11.2-2, qt6-declarative 6.11.2-1, qt6-svg 6.11.2-1, qt6-imageformats 6.11.2-1
- GPU: AMD Radeon RX 9070 XT (amdgpu, Navi 48), MODE1 reset on this resume
- CPU: AMD Ryzen 9 5900X
- Desktop: Gigabyte X570 AORUS MASTER, Wayland / Hyprland, 3840x2160

`omarchy-debug --no-sudo --print` was run at 2026-09-01 10:56 EEST and wrote `/tmp/omarchy-debug.log` (113 KiB). Relevant excerpt:

```
Hostname: omarchy
Omarchy Package: omarchy 4.0.2-1
Kernel 7.1.9-arch1-2 x86_64
Desktop Hyprland v 0.56.2  Distro Omarchy
Machine: Desktop  Gigabyte X570 AORUS MASTER
CPU: AMD Ryzen 9 5900X  12 cores / 24 threads
Graphics: AMD Navi 48 [Radeon RX 9070/9070 XT] driver amdgpu
Display: wayland  compositor Hyprland 0.56.2  Monitor DP-3 3840x2160
Memory: 32 GiB
```

Quickshell's own crash report is at `~/.cache/quickshell/crashes/p619ajmkt/` (`report.txt` + `log.qslog.log`). systemd-coredump pid **287958**.

Filed by Grok 4.6 via Grok Build.

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.

  • Decided by agents · verified: matches no known issue

The outcome (valid, duplicate, not a bug, …) is not decided yet.