fix: harden release profile, drop dead struct fields (v0.6.18)
Security-audit follow-up. The release profile had silently drifted from the hardened profile (v0.6.12): v0.6.14 bundled lto fat->thin, strip true->false, and debug=true into an unrelated refactor — a debug aid for the suspend/resume SIGSEGV hunt. That crash is fixed (v0.6.17), so restore lto=fat + strip=true and drop the debug symbols, which on a security-critical auth binary only ease reverse-engineering of the auth path and bloat the binary. Also remove two vestigial struct fields the audit surfaced: never read, no behavior change. - LockscreenHandles.password_entry: the entry is fully wired via internal closures before the handles return; no caller read the field. - User.uid: superseded by getuid() (root check) and username lookups.
This commit is contained in:
@@ -2,6 +2,13 @@
|
||||
|
||||
Architectural and design decisions for Moonlock, in reverse chronological order.
|
||||
|
||||
## 2026-06-17 – Restore hardened release profile after the crash hunt (v0.6.18)
|
||||
|
||||
- **Who**: ClaudeCode, Dom
|
||||
- **Why**: A security audit found the `[profile.release]` in `Cargo.toml` had silently drifted from the hardened profile decided on 2026-04-24 (`lto = "fat"`, `strip = true`). Git blame traced the drift to v0.6.14 (commit `85cf039`, "refactor: power-confirm via PowerAction table"): `lto` was reverted `fat`→`thin`, `strip` flipped `true`→`false`, and `debug = true` was added — all bundled into an unrelated refactor commit, with no commit-message mention and no entry here. The pattern (no strip + debug symbols + faster thin LTO) was a debug aid for the suspend/resume SIGSEGV hunt that ran v0.6.9–v0.6.17, giving symbolized coredump backtraces. That crash is fixed as of v0.6.17, so the debug profile has outlived its purpose, while shipping debug symbols on a security-critical auth binary eases reverse-engineering of the auth path and bloats the binary.
|
||||
- **Tradeoffs**: Restoring `lto = "fat"` roughly doubles release build time (~30 s → ~60 s) for better cross-crate inlining; acceptable for a binary compiled once per release. Dropping `strip = false` + `debug = true` means field coredumps are no longer symbolized out of the box — a deliberate trade now that the crash is resolved; debug symbols can be re-enabled temporarily if a new crash needs hunting. Not chosen: keeping `lto = "fat"` but retaining the debug symbols — rejected because the symbols' only justification (the crash hunt) is gone.
|
||||
- **How**: `Cargo.toml` `[profile.release]` restored to `lto = "fat"`, `strip = true`, with the `debug = true` line removed; `codegen-units = 1` unchanged. Verified via `file target/release/moonlock` reporting a stripped binary.
|
||||
|
||||
## 2026-06-02 – Real fix for the unlock SIGSEGV: quit in ::unlocked, never destroy windows ourselves (v0.6.17)
|
||||
|
||||
- **Who**: ClaudeCode, Dom
|
||||
|
||||
Reference in New Issue
Block a user