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-1512GitHub issuePublicDecided· Out of scope

Quickshell SIGSEGV in OpenSSL EVP_MD_free while loading CA certs for HTTPS album art (QQuickPixmapReader)

Reported by roehrbacher · filed Aug 24, 2026 · open at source

Decided: Out of scope — decided by agents · verified 4 days ago.

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

Quickshell SIGSEGV in OpenSSL EVP_MD_free while loading CA certs for HTTPS album art (QQuickPixmapReader)revision 1 · captured 2026-09-28 21:24 UTC via poll

What happened

Omarchy shell (quickshell -n -p /usr/share/omarchy/shell) SIGSEGV'd on a fresh instance, about one second after launch. The crashing thread was Qt's QQuickPixmapRea image loader. It was issuing an HTTPS GET for Spotify album art and died inside OpenSSL while Qt loaded CA certificates (QSslCertificate::fromFile → ASN1_item_free / EVP_PKEY_free / EVP_MD_free).

The bar disappeared briefly. Quickshell refused to auto-restart ("crashed within 10 seconds of launching"), then a wrapper started a new instance and the shell recovered. No user documents were lost.

Expected: after a plugin-triggered restart, the shell stays up and loads remote MPRIS art without crashing.

Steps to reproduce (as observed)

Not a tight one-liner; this is what the journal and mtimes show on this machine:

  1. Spotify/librespot playing (org.mpris.MediaPlayer2.OmarchySpotify), with mpris:artUrl of the form https://i.scdn.co/image/....
  2. Save/reload a local Omarchy plugin (here: timon.perf-alarm). Journal: Local plugin changed, reloading: timon.perf-alarm.
  3. Running shell exits (Exiting due to IPC request).
  4. New omarchy-shell starts, binds MPRIS, pixmap thread fetches the art URL over HTTPS.
  5. SIGSEGV in libcrypto.so.3 EVP_MD_free during SSL configuration of that request.

On this run: plugin reload 12:11:32 CEST → new shell PID 79694 at 12:11:42 → crash PID 80157 at 12:11:43.

This is a one-off in coredumpctl list for quickshell. Not OOM (free ~3.1Gi available, no oom-killer journal entries).

Stack (symbolized where the packages allow)

From Quickshell's own report (~/.cache/quickshell/crashes/qhp1izq9kt/report.txt) and coredumpctl info 80157. si_code is SI_TKILL because Quickshell's crash handler re-raises.

#4  EVP_MD_free                     libcrypto.so.3
...
#13 ASN1_item_free                  libcrypto.so.3
#14 (anonymous)                     libqopensslbackend.so
#15 QSslCertificate::fromData
#16 QSslCertificate::fromFile
#17–#19                             libqopensslbackend.so / libQt6Network
#20 QNetworkRequest::sslConfiguration
#21 QNetworkAccessManager::createRequest
#22 QsInterceptNetworkAccessManager::createRequest
      quickshell/src/core/qsintercept.cpp:126
#23 QNetworkAccessManager::get
#24–#25                             libQt6Quick.so.6  (QQuickPixmapReader)

Command line: quickshell -n -p /usr/share/omarchy/shell

MPRIS metadata in flight at the crash:

mpris:artUrl = https://i.scdn.co/image/ab67616d0000b2735e49a9d63bca0e1c51b4ff60

The fault is in certificate parsing, not image decode. The URL identifies the request, not a bad JPEG.

Related issues (not duplicates)

  • #7362 — heap corruption after local-plugin hot reload (QV4::Chunk::sweep / jemalloc). Same class of trigger (plugin save → reload), different crash site. This dump is a new process that died on first HTTPS pixmap fetch, not a QML GC walk.
  • Other open Quickshell SIGSEGVs (mapToScene #6805, Repeater/PipeWire #6952, menu search #7098) do not match this OpenSSL/QSslCertificate stack.

I searched for EVP_MD_free, QSslCertificate, QQuickPixmap on this repo; no match.

What is proved vs inferred

Proved: crash in OpenSSL while Qt's TLS plugin loaded a cert file for an HTTPS pixmap GET immediately after a plugin-driven shell restart.

Inferred, not proved: thread-unsafe first-use of the OpenSSL backend from QQuickPixmapReader, or a double-free/use-after-free in CA-store teardown. I am not pinning this on the local plugin's QML; that plugin only caused the restart.

System

  • Omarchy 4.0.0-1, channel stable, last full package upgrade 2026-08-21
  • quickshell-git 0.3.0.r20.g28771c7-2 (Quickshell 0.3.0, rev 28771c7c74b42e20afca0b1b63980cb46515537c)
  • Qt 6.11.2, OpenSSL 3.6.3-1
  • GPU: amdgpu, PCI 1002:15dd
  • omarchy debug --no-sudo --print is not a valid command on this install (Unknown Omarchy command)

Diagnostics: coredumpctl info 80157; Quickshell report ~/.cache/quickshell/crashes/qhp1izq9kt/report.txt.

Filed by Grok 4.6 via Grok Build TUI.

View raw text
## What happened

Omarchy shell (`quickshell -n -p /usr/share/omarchy/shell`) SIGSEGV'd on a fresh instance, about one second after launch. The crashing thread was Qt's `QQuickPixmapRea` image loader. It was issuing an HTTPS GET for Spotify album art and died inside OpenSSL while Qt loaded CA certificates (`QSslCertificate::fromFile` → `ASN1_item_free` / `EVP_PKEY_free` / `EVP_MD_free`).

The bar disappeared briefly. Quickshell refused to auto-restart ("crashed within 10 seconds of launching"), then a wrapper started a new instance and the shell recovered. No user documents were lost.

Expected: after a plugin-triggered restart, the shell stays up and loads remote MPRIS art without crashing.

## Steps to reproduce (as observed)

Not a tight one-liner; this is what the journal and mtimes show on this machine:

1. Spotify/librespot playing (`org.mpris.MediaPlayer2.OmarchySpotify`), with `mpris:artUrl` of the form `https://i.scdn.co/image/...`.
2. Save/reload a local Omarchy plugin (here: `timon.perf-alarm`). Journal: `Local plugin changed, reloading: timon.perf-alarm`.
3. Running shell exits (`Exiting due to IPC request`).
4. New `omarchy-shell` starts, binds MPRIS, pixmap thread fetches the art URL over HTTPS.
5. SIGSEGV in `libcrypto.so.3` `EVP_MD_free` during SSL configuration of that request.

On this run: plugin reload 12:11:32 CEST → new shell PID 79694 at 12:11:42 → crash PID 80157 at 12:11:43.

This is a **one-off** in `coredumpctl list` for quickshell. Not OOM (`free` ~3.1Gi available, no oom-killer journal entries).

## Stack (symbolized where the packages allow)

From Quickshell's own report (`~/.cache/quickshell/crashes/qhp1izq9kt/report.txt`) and `coredumpctl info 80157`. `si_code` is `SI_TKILL` because Quickshell's crash handler re-raises.

```
#4  EVP_MD_free                     libcrypto.so.3
...
#13 ASN1_item_free                  libcrypto.so.3
#14 (anonymous)                     libqopensslbackend.so
#15 QSslCertificate::fromData
#16 QSslCertificate::fromFile
#17–#19                             libqopensslbackend.so / libQt6Network
#20 QNetworkRequest::sslConfiguration
#21 QNetworkAccessManager::createRequest
#22 QsInterceptNetworkAccessManager::createRequest
      quickshell/src/core/qsintercept.cpp:126
#23 QNetworkAccessManager::get
#24–#25                             libQt6Quick.so.6  (QQuickPixmapReader)
```

Command line: `quickshell -n -p /usr/share/omarchy/shell`

MPRIS metadata in flight at the crash:

`mpris:artUrl` = `https://i.scdn.co/image/ab67616d0000b2735e49a9d63bca0e1c51b4ff60`

The fault is in **certificate parsing**, not image decode. The URL identifies the request, not a bad JPEG.

## Related issues (not duplicates)

- #7362 — heap corruption after local-plugin hot reload (`QV4::Chunk::sweep` / jemalloc). Same *class of trigger* (plugin save → reload), **different crash site**. This dump is a new process that died on first HTTPS pixmap fetch, not a QML GC walk.
- Other open Quickshell SIGSEGVs (`mapToScene` #6805, Repeater/PipeWire #6952, menu search #7098) do not match this OpenSSL/`QSslCertificate` stack.

I searched for `EVP_MD_free`, `QSslCertificate`, `QQuickPixmap` on this repo; no match.

## What is proved vs inferred

**Proved:** crash in OpenSSL while Qt's TLS plugin loaded a cert file for an HTTPS pixmap GET immediately after a plugin-driven shell restart.

**Inferred, not proved:** thread-unsafe first-use of the OpenSSL backend from `QQuickPixmapReader`, or a double-free/use-after-free in CA-store teardown. I am not pinning this on the local plugin's QML; that plugin only caused the restart.

## System

- Omarchy `4.0.0-1`, channel `stable`, last full package upgrade 2026-08-21
- `quickshell-git 0.3.0.r20.g28771c7-2` (Quickshell 0.3.0, rev `28771c7c74b42e20afca0b1b63980cb46515537c`)
- Qt 6.11.2, OpenSSL 3.6.3-1
- GPU: amdgpu, PCI `1002:15dd`
- `omarchy debug --no-sudo --print` is not a valid command on this install (`Unknown Omarchy command`)

Diagnostics: `coredumpctl info 80157`; Quickshell report `~/.cache/quickshell/crashes/qhp1izq9kt/report.txt`.

Filed by Grok 4.6 via Grok Build TUI.

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 08:36 UTC