Normal-service VG-Lite access: host evidence
2026-09-23 UTC, branch apply/vglite-composition, base
e0dbcf6b1f213322571f604bb7d078998baa1276. No board access, unit activation,
device open, or hardware GPU result was performed for this checkpoint.
Narrow commands and observed results
VGLITE_SOURCE=/tmp/k230-sdk-vglite-src/buildroot-overlay/package/vg_lite \
tools/test-vglite-access.sh
PASS with AddressSanitizer/UndefinedBehaviorSanitizer. The actual patched SDK source is compiled against its pinned headers. Fake ioctl results allocate real anonymous mappings; actual Linux fork/exec/fcntl/madvise/mincore verify private fd revocation, CLOEXEC independently of atfork, exclusion of command/tessellation/ power/pixel mappings, and child exit 127 after mapping-protection failure.
The actual C client uses real Unix sockets and SCM_RIGHTS. Only server root
credentials are injected. Success, untrusted peer, bad reply, missing fd,
multiple fds, ancillary truncation, SDK adoption failure and unavailable socket
are exercised. Received descriptors are CLOEXEC, PR_GET_DUMPABLE is zero, and
/proc/self/fd counts verify cleanup after each case.
Seven Python broker tests PASS. Actual socket credentials, peer pidfds and SCM_RIGHTS are used; systemd/proc metadata are fixtures. Tests cover every policy field, same-UID wrong MainPID, changed MainPID, missing proc access, unavailable Yama protection, malformed request, rejected device modes, repeat grant, and socket transfer after its creator exits. They do not prove production root service credentials or actual driver transfer.
WLROOTS_SOURCE=/nix/store/r2zcb3d3dgmz09qjaqsy945inal2h41r-source \
VGLITE_SOURCE=/tmp/k230-sdk-vglite-src/buildroot-overlay/package/vg_lite \
tools/test-vglite-renderer.sh
PASS: production renderer vs pinned Pixman pixels plus recording/submission/ completion failure tests, ASan/UBSan. This test stubs the broker denial boundary; real client transport is covered separately above. No hardware result inferred.
nix build .#shell-compositor-vglite-service --no-link --print-out-paths
PASS, cross-built optional wrapper and VG-Lite/renderer/Sway dependency chain:
/nix/store/3rgdggbm2qds0g7x16zh9yyb4yshs1xd-sway.
Built wrapper inspection confirms its final action is exec of the exact
unwrapped Sway named in broker policy with an existing session bus, preserving compositor MainPID.
The wrapper was not executed on the board.
Nix evaluation separately checks default renderer/option/broker absence and the
trial service user, executable, broker restrictions and socket ownership. The
normal default remains Pixman; trial runtime credentials and task 2.5 stay
UNVERIFIED, with source contract and operator gates documented in
docs/research/vglite-service-access.md.
Final built wrapper and evaluated broker both name:
/nix/store/bn4kknllz69447c1m2w4lgd2xa4dkplk-sway-unwrapped-riscv64-unknown-linux-gnu-1.12/bin/sway. Exact path equality was asserted after inspection.
openspec validate the-shell-trials-vglite-composition --strict passed.
./tools/blob-scan.py --no-vendor passed (committed-tree scan).