Repository navigation
hisn 0.4.3
0.4.3 adds no features. It locks in the 0.4.2 fixes with regression tests,
adds a release gate, fixes smaller audit findings, and restructures
session startup so the coming egress proxy, cgroup v2 limits and
multi-seat work can be added safely.
Host evidence (rubin): make release-gate all ok (fmt, clippy, make
check, make test), leak suite 333 passed, 0 failed, 9 skipped, 1 weak;
with HISN_TEST_ROOTFS and HISN_BIG_TESTS the leak suite reports 346
passed, 0 failed, 5 skipped, 1 weak; make leaktest on a terminal also
reports 333 passed, 0 failed, 9 skipped, 1 weak. The gate's
pseudo-terminal step was skipped because script is not installed; the
direct terminal run covers it. No unit-test count for rubin is recorded;
no sessions, leak or integration tests were run in the build sandbox.
Changed
- Host services run in their own process group. Each host service is
a process-group leader with stdin/dev/null(stdout and stderr too).
Stopping a session signals the whole group, then SIGKILLs it after the
leader is reaped, so a TERM-ignoring child does not survive. - Startup fails at once when a host service exits before readiness
completes, withhost_service <name>: exited with status <n> before readiness completed. - A service shows
startinginls --jsonuntil readiness passes,
thenready.exitstaysnullfor in-sandbox services. - SSH agent proxy timeouts. The host agent socket now has a 30 s
read timeout alongside the existing 30 s write timeout. - Release gate.
make release-gateruns fmt, clippy,make check,
make testand the leak suite (pipe, then pseudo-terminal when
scriptis present), stopping at the first failure.
Fixed
recv_with_fdtreats a truncated control message as an error.rootfs.rsdupfailures now return the OS error instead of wrapping -1.stdio_to_dev_nullcloses the opened fd only above fd 2 on error.- The SSH agent client counter is decremented on every exit path via a
guard inside the worker thread. sessionmeta::rewriteremoves a stale temp of the same name before
creating a new one.- Leak tests L77/L78 take the helper socket path from
argv[1]; the
release gate pipes the leak suite and reports a skipped pseudo-terminal
run honestly; dead-service detection, the cleanup guard's group kill,
and the ExecTable insert panic are fixed.
Hardening
run_sessionis split into named phases behind one cleanup guard; a new
src/services.rsholds the service code; host and in-sandbox stops
share onestop_and_reappath; one profile load; one exec table.- Leak cases L76–L81: exec cancel on early disconnect, hung and slow
readiness probes, load-time rejections, host-service group stop, and
readiness failing for an already-dead host service.
Leak suite: the portable subset runs in CI; host-only checks (user namespaces, rootfs, attach, leases) are verified on a real host before tagging — see the release notes for the host result. The aarch64 binary is built and started (--version) but has not been leak-tested. The glibc binaries (hisn-x86_64-linux-gnu, hisn-aarch64-linux-gnu) are dynamically linked and built natively on Ubuntu 22.04 (glibc 2.35 or newer required). The musl binary (hisn-x86_64-linux-musl) is statically linked. Verify with sha256sum -c SHA256SUMS. See README, "Verifying a build".