2026-09-01 (hardware injector capture #3 analysis: exit via SYS_exit & socket log deduplication) (D287)
Analyzed hardware test logs
(reports/hardware/injector-klog.txt and
reports/hardware/injector-klog.txt.klog):
- Telemetry & Safety Verification:
- Syscall trampoline dispatched all calls through
libkernelwithout triggering anyPPRBUG-22859traps. - Kernel R/W cleanly established on FW 12.40
(
0x12400009), locating kernel data base0xffffffffc4940000. - Process elevation succeeded (
authid=0x4800000000010003) and syscall restriction boundary was unlocked. target_resolvesuccessfully verified that no sandboxed retail title was running, protected all system processes, logged"ERROR: no running retail game found in userland", and restored credentials viakrw_restore_current_process().
- Syscall trampoline dispatched all calls through
- Post-Execution Crash Cause (
SIGILLat0x4000ab):injector_startexited viareturn -4;, executingretat0x2000044fd.- This popped the address
0x4000ableft on the stack whenelfldrintercepted the sacrificial daemonNPXS40112(SceSpZeroConf). Returning intoNPXS40112at0x4000abtriggered an unhandledSIGILL(privileged instruction fault), causingSyscore Appto logApp Crash: PID=0xe5, reason=0x4, invokecoredump.elf, and terminate the process. - As established in
src/probe/start.c, freestanding payloads must never executeret.
- Clean Process Termination:
- Added
#define SYS_exit 1tosrc/common/syscall.h. - Added
injector_exit(int code)tosrc/injector/injector.cissuingsys_call(SYS_exit, code)with a fallback spin loop (pause). - Replaced all
return -N;andreturn 0;statements ininjector_startwithinjector_exit(code), terminating the sacrificial host process cleanly without coredumps.
- Added
- Socket Log Deduplication & Hex Prefix
Formatting:
- Traced duplicated lines in
injector-klog.txttoklog_writewriting to bothfd 1andfd 2. Becauseelfldrdup2's the incoming TCP socket to both descriptors (D205), every message was transmitted twice over the network. - Removed
sys_call(SYS_write, 2, ...)fromklog_writeso each line is sent once overfd 1. - Corrected static string prefixes in
klog_write_hexcalls to avoid prepending redundant0xahead ofobs_format_hex.
- Traced duplicated lines in
Verified: make check BUILD=$HOME/obs,
make payload injector HARDWARE=1 BUILD=$HOME/obs
(9,393,592 bytes), and bash scripts/verify.sh
pass 100% clean.
Hardware test ./bin/obscene inject re-run (Run #4)
validated all fixes live on console:
- Clean process exit verified: PID 231 logged
# process pid=231, payload.elf calls exit() exit_value=fffffffc.with ZERO fatal signals, zeroSIGILL, zero coredumps, and noApp Crashevents. - Log deduplication verified:
injector-klog.txtreceived exactly 7 non-duplicated lines over the socket. - Hex format verified: Correct
fw=0x12400009andbase=0xffffffffc4940000prefixes without duplicate0x0x.