Publish Chimera GFX source
phase0-ci / build-and-audit (push) Successful in 2m14s

This commit is contained in:
Chimera GFX release export
2026-09-03 03:27:14 +02:00
commit a6037502d7
828 changed files with 100454 additions and 0 deletions
@@ -0,0 +1,133 @@
# Phase 0.9B bounded observer design
Status: **BLOCKED — OFFLINE AUDIT ONLY**.
No observer source, PS5 target, ELF, installation package, lifecycle package or
execution package was created. No PS5 connection, scan, transfer or execution
occurred. This document describes the rejected design boundary and the exact
evidence needed before implementation may start.
## Canonical boundary
- Historical Phase 0.8 remains `READ_ONLY_PREFLIGHT_BLOCKED`.
- Phase 0.9A remains `DESIGN_ONLY`.
- Firmware 9.60 runtime behavior remains `UNPROVEN`.
- Stock sizes and hashes remain `reference_only`.
- The byte-exact on-device Payload Manager backup remains a `HARD_BLOCKER`.
- Every authorization field remains `false`; automatic retry remains `false`.
- SHA-256
`4be1c17b4964f2b68c39b5145bc4af4619c32512d60269ecf5c39728b390fa63`
remains permanently denied and execution-ineligible.
## Source identities
| Source | Commit | Tree |
|---|---|---|
| hardened elfldr | `197623058f509eddde18868dafcb92fdcac66464` | clean |
| controlled Payload Manager | `e23d94ff91233aa770e2342800c1467875bdef44` | clean |
| public elfldr v0.23 base | `699e8bcff03e91e8d6ca6eba281af25c5a58d8c2` | clean |
| public Payload Manager v0.3.1 base | `cfbc70f30f419b09bf2b52283f7409e2d3117ee1` | clean |
| PS5 Payload SDK v0.41 | `d2e2e585740362976a39fdd5ccf390f199a7bc37` | clean |
| lifecycle-probe source | `fe08300339a13f899fb78ea404ada381a5cba87c` | byte identity checked |
The public bases establish provenance and the pre-hardening behavior. The
hardened source commits establish the only controlled route considered here.
No external source was contacted during this audit.
## Mandatory gates
| Gate | Required | Evidence | Result |
|---|---|---|---|
| kernelwrite-free startup | complete reachable startup path excludes kernel/process patch writes | SDK `crt/crt.c:48-80,193-220`, `crt/patch.c:25-101`, `crt/Makefile:19-26` | **FAIL** for normal CRT |
| custom entry ABI | entry register, BSS, stack, return, exit and cleanup are all proven | elfldr `elfldr.c:273-415`; prior Phase-0.5 audit | **UNPROVEN** |
| non-persistent output | payload bytes return over the hash-bound route without a device file, listener or global-state mutation | elfldr `socksrv.c:129-145,361-365`, `elfldr.c:499-520`; manager `verified_launcher.c:119-185`, `ps5_launcher.c:18-70` | **FAIL** |
| bounded exit | successful and failing observer paths terminate without relying on an unproven ABI | SDK `crt/crt.c:150-220`; hardened loader watchdog | **UNPROVEN** |
Both implementation gates fail independently. The build gate therefore stops
before observer source or target creation.
## Capability matrix
“Source present” does not mean firmware-9.60 behavior is proven. “Implement”
is `no` for every row because startup/exit and output fail first.
| Needed fact | Available local API | Source | Evidence | Implement |
|---|---|---|---|---|
| firmware source 1 | `kernel_get_fw_version()` reads `sdk_ps5_ver` | SDK `crt/kernel.c:148-171` | source present; runtime unproven | no |
| firmware source 2 | none established | — | unproven | no |
| file metadata | `open(O_RDONLY\|O_NOFOLLOW\|O_CLOEXEC)`, `fstat`, `lstat`, `close` | manager `verified_launcher.c:76-115,174-184` | source/host evidence only | no |
| object identity | pre/post `st_dev`, `st_ino`, `st_size` | manager `verified_launcher.c:26-29,87-101` | source/host evidence only | no |
| SHA-256 | bounded descriptor read plus local SHA-256 | manager `verified_launcher.c:31-55`, `src/sha256.c` | source/host evidence only | no |
| mount information | `getmntinfo()` / `getfsstat()` sample | SDK `samples/mntinfo/main.c`, `libc/getmntinfo.c` | sample present; runtime unproven | no |
| processes/services | `sysctl(KERN_PROC)` sample; no complete service map | SDK `samples/ps/main.c` | partial and runtime unproven | no |
| listeners | none established | — | unproven | no |
| autoload configuration | stock file readers and mutating HTTP handlers | manager `config.c`, `autoload.c`, `http_server.c` | unsafe or unproven | no |
| output channel | controlled route suppresses payload stdio and manager has no receive operation | elfldr `socksrv.c`, manager `ps5_launcher.c` | proven absent on controlled route | no |
| monotonic deadline | `clock_gettime(CLOCK_MONOTONIC)` in loader watchdog | elfldr `ps5_controlled.c:26-59` | source/host evidence only | no |
| process exit | normal CRT terminate path or custom return | SDK `crt/crt.c:150-220`, elfldr `elfldr.c:380-415` | observer ABI unproven | no |
Unknown capabilities remain unknown. There is no FreeBSD, PS4 or other
firmware fallback.
## Rejected runtime designs
### Normal SDK CRT
The installed compiler wrapper adds `crt1.o` unless `-nostartfiles` is used.
That object transitively contains `patch.o`. `_start()` calls
`payload_init()`, which calls `__patch_init()` before `main`.
`__patch_init()` changes credential capabilities/attributes and syscall
permission bounds. This violates the Phase-0.9B kernelwrite-free requirement.
### Freestanding custom `_start`
The loader places its `payload_args_t *` in `RDI`, stores the old instruction
pointer at `RSP-8`, and enters the ELF. Those operations show how control is
transferred; they do not prove that a bare `ret`, a direct process-exit import,
or another custom termination path performs every required cleanup safely.
The prior minimal-startup gate remains blocked. It was not bypassed.
### Controlled stdout/stderr
The controlled route passes `-1` as `stdio`. The elfldr duplicates the request
socket into standard descriptors only when `stdio > 0`. The manager transport
exposes connect, send and close callbacks but no receive callback. The fixed
`Controlled payload exited` response carries no observer data. The legacy
stdio route is not the hash-bound controlled route and is inadmissible.
### Notifications, klog and manager HTTP
A system notification is not a complete deterministic machine-readable return
channel. Klog is not proven to be a bounded host-return channel. The Payload
Manager HTTP service is a persistent listener, and ordinary routes change
process-global state; `/autoload_status` also changes autoload state. None is
admissible.
## Intended observer shape if gates are later proven
This is a non-implemented contract:
1. enter once through a source-bound, kernelwrite-free ABI;
2. emit a fixed offline-bound artifact identity;
3. initialize bounded in-memory results;
4. execute each explicitly authorized read at most once;
5. emit raw value or explicit error;
6. emit a final status;
7. terminate through a proven exit/cleanup path.
It would have no event loop, server, thread, callback, retry, sleep, process
signal, subprocess, module load, file mutation, lifecycle action, graphics,
SDL, RetroArch, GNM or VideoOut behavior.
## Decision
**BLOCKED — OBSERVER STARTUP OR EXIT ABI UNPROVEN; NO PROVEN
NON-PERSISTENT OUTPUT CHANNEL.**
The minimum missing evidence is:
1. a commit-bound, kernelwrite-free entry and termination contract that covers
BSS, stack, return/exit, crash paths and loader cleanup; and
2. a commit-bound controlled response route that carries bounded observer
bytes without a device file, new listener, persistent state or Payload
Manager global-state mutation.