danos/test/system/services
Daniel Samson 1b1c587c14
library: the harness keeps the subscribers, and an id belongs to whoever opened it
Three services had each written the same thing and got it three different
ways: input polled the process list to notice a dead subscriber, and only
when someone else subscribed; the power service never noticed at all; the
device manager noticed drivers but not subscribers. The harness owns the
table now, driven by the events a protocol declares — it registers on the
reserved verb, frames each event once, posts to everyone interested without
waiting on any of them, and reclaims a slot when the kernel says its owner
died. Interest masks moved to the envelope, so a subscriber that wants only
mice asks the same way everywhere.

Two consequences the plan had not foreseen. The device manager now hears a
supervised child's death twice, once as its supervisor and once as a
subscriber, so restart backoff counted every crash twice and gave up after
half as many; it retires the id before counting. And the kernel's published
exit table had eight slots for what is now six subscriptions in a plain
boot, so it holds sixteen.

The other half is a hole the design named early and left standing: a
backend handed out a small integer and then honoured it from anyone. A
process that guessed a file's node id read another client's file; a display
layer had no owner at all, so any client could reconfigure or destroy any
layer; a USB device token was never checked against the client that opened
it. Each is now bound to the task that opened it, and a wrong owner gets
exactly what an unknown id gets — the refusal must not become the oracle
the identical answers elsewhere were designed to remove. Closing a file
changed with it: it used to succeed unconditionally, which would have told
a caller which ids existed.

Suite 111/111, with a new case in which one process holds a file and a
layer, hands both ids to a second process, and finds them untouched after
that process has tried everything with them.
2026-08-01 09:05:26 +01:00
..
args-echo build: delete module_homes — imports resolve through the declared zon 2026-07-30 07:49:19 +01:00
badge-scope-test library: the harness keeps the subscribers, and an id belongs to whoever opened it 2026-08-01 09:05:26 +01:00
crash-test library: the last three protocols speak the envelope 2026-08-01 07:20:37 +01:00
device-list library: the last three protocols speak the envelope 2026-08-01 07:20:37 +01:00
fat-test build: the unix paths retire — configuration, logs, and volumes move into the danos tree 2026-07-31 19:41:35 +01:00
input-source build: delete module_homes — imports resolve through the declared zon 2026-07-30 07:49:19 +01:00
input-test build: delete module_homes — imports resolve through the declared zon 2026-07-30 07:49:19 +01:00
iommu-fault-test build: delete module_homes — imports resolve through the declared zon 2026-07-30 07:49:19 +01:00
pci-cap-test build: delete module_homes — imports resolve through the declared zon 2026-07-30 07:49:19 +01:00
process-test init: /protocol replaces the ServiceId registry 2026-08-01 02:39:07 +01:00
protocol-conformance-test library: the last three protocols speak the envelope 2026-08-01 07:20:37 +01:00
protocol-denied-test library: five protocols speak the envelope 2026-08-01 06:15:25 +01:00
protocol-registry-test library: the last three protocols speak the envelope 2026-08-01 07:20:37 +01:00
shared-memory-client init: /protocol replaces the ServiceId registry 2026-08-01 02:39:07 +01:00
shared-memory-server init: /protocol replaces the ServiceId registry 2026-08-01 02:39:07 +01:00
thread-test build: delete module_homes — imports resolve through the declared zon 2026-07-30 07:49:19 +01:00
user-memory-test kernel: user memory is reached only through a checked copy 2026-07-31 20:57:49 +01:00
vfs-test build: the unix paths retire — configuration, logs, and volumes move into the danos tree 2026-07-31 19:41:35 +01:00