Repository navigation
issues: an optional severity field flags dangerous defects for one query - #1174
Conversation
Review of #1174 at e5fd144Architecture and fit. This change touches Markdown only: 90 lines added and 4 removed, made of 14 README lines and one frontmatter line in each of 74 records. It adds no gate or tool, which matches the brief, and Queries. I ran them myself on the branch: 26, 18, 24 and 6 records, 74 in total. That is 74 FindingsBLOCKER
State that test. For example: "loses or corrupts stored or in-flight data; a refusal that loses nothing already accepted is not". BLOCKER SUGGESTION
Meanwhile SUGGESTION The
Apply one standard to each pair. SUGGESTION SUGGESTION Clauses and sample
Evidence. The change is Markdown only, so no build or guest test can change. The host-CI log was recorded on a tree said to be identical to the head; I did not need it to verify anything. SEND BACK |
…f service is security - data-loss: a refusal that loses nothing it had already accepted does not qualify; accepted data later reported lost does. - security: one client exhausting a resource other clients need counts (the coordinator's ruling, pending the owner), so one-diskserver-session-can-hold-every-device-slot is flagged. - a-claim-spends-device-addresses-its-slot-never-gets-back is kernel-from-userland: a holder looping claim, allocate and die leaks remapping tables until Tables::alloc panics the kernel. - One standard for each pair. tsx-stays-as-firmware-left-it names no affected machine, like L1TF. The process-name record's forged records reach only test judges, like the test over-grants. Both lose security. - a-stops-file-sync-and-its-failure-are-never-recorded shows an outcome that cannot be observed, not lost data, so it loses data-loss. - The README's query comments are shortened. Now 73 records: security 25, data-loss 17, hang 24, kernel-from-userland 7. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Orchestrator verification: round 1 ( |
The owner's ruling of 2026-11-04 adds `severity` to the issue frontmatter: a list drawn from four flags (security, data-loss, hang, kernel-from-userland), carried only by a defect or a finding that describes one, with no scale. issues/README.md defines each flag beside status and kind and gives one rg query per flag. No tool validates issue frontmatter, so none is extended. The backfill reads each record the 2026-11-03 triage flagged that still exists (69 of 76; the other seven were closed by fixes), keeps a flag only where the record's own text supports it, and adds records the triage did not flag: the records opened since, the findings it did not classify, and unflagged defects that clearly qualify. 74 records carry the field: 26 security, 18 data-loss, 24 hang, 6 kernel-from-userland. The pull request lists each disagreement with the triage. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…f service is security - data-loss: a refusal that loses nothing it had already accepted does not qualify; accepted data later reported lost does. - security: one client exhausting a resource other clients need counts (the coordinator's ruling, pending the owner), so one-diskserver-session-can-hold-every-device-slot is flagged. - a-claim-spends-device-addresses-its-slot-never-gets-back is kernel-from-userland: a holder looping claim, allocate and die leaks remapping tables until Tables::alloc panics the kernel. - One standard for each pair. tsx-stays-as-firmware-left-it names no affected machine, like L1TF. The process-name record's forged records reach only test judges, like the test over-grants. Both lose security. - a-stops-file-sync-and-its-failure-are-never-recorded shows an outcome that cannot be observed, not lost data, so it loses data-loss. - The README's query comments are shortened. Now 73 records: security 25, data-loss 17, hang 24, kernel-from-userland 7. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Its typed line never becomes a held line, and only the probe's 120 s ceiling ends the run: lost progress, like the ps2 overflow's. After the rebase onto main, 72 records carry severity: security 25, data-loss 16, hang 24, kernel-from-userland 7. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2422f0e to
0fee9ec
Compare
Brings #1176 (the declared QEMU moves to 11.1.3) and #1174 (the optional issue severity field). One conflict: main added `severity: [security]` to issues/a-swapped-binary-lives-where-any-process-can-rewrite-it.md, which this branch closes (swap lends the bytes in a memory region the supervisor verifies); the deletion stands. The issues this branch files carry no severity flag: none of the four applies to them. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Problem and result
Dangerous defects could not be found without reading every record. Per the owner's ruling of 2026-11-04, issue frontmatter now takes an optional
severityfield. It holds a YAML flow list of fixed flags, for exampleseverity: [security, hang]:security: breaks an isolation boundary or an authority by itself. One client exhausting a resource other clients need counts. A missing hardening layer that needs another bug to exploit does not.data-loss: loses or corrupts stored or in-flight data. Accepted data later reported lost counts. A refusal that loses nothing it had already accepted does not.hang: a wait with no failure timeout, or lost progress.kernel-from-userland: userland input can panic or degrade the kernel.If the field is absent, no flag applies. Only a
defect, or afindingthat describes one, may carry it. There is no scale, and performance is not a flag.issues/README.mddocuments the field besidestatusandkind, with onergquery per flag.Shape. The list is real YAML and stays on one line. No flag name is a substring of another, so
rg -l '^severity:.*<flag>' issues/matches exactly and works for records with several flags.No validator is extended. None exists.
build/userlandhost.rs'sowedreads one named record'sstatusand nothing else, andbuild/andtests/hold nothing else that parses the frontmatter. Following the brief, no new gate is added.Backfill
72 records carry the field. Every one carries a single flag: no record's text supported a second one.
rg -l '^severity:.*security' issues/rg -l '^severity:.*data-loss' issues/rg -l '^severity:.*hang' issues/rg -l '^severity:.*kernel-from-userland' issues/rg -l '^severity:' issues/The triage flagged 76 records. 69 of them still exist, and I read each one in full. The other seven were closed by fixes:
a-counters-read-under-host-load-can-go-silent-for-15-s(28a9812),a-fresh-kernel-heap-chunk-holds-its-frames-last-owners-bytes(cc347f3),the-kernels-relro-stays-writable(4c03026), and four closed by 938c4a7 (a-new-x86-thread-enters-ring-3-holding-kernel-register-values,aarch64-el1-runs-without-pan,interrupt-entry-keeps-a-ring-3-ac-flag,user-pointer-checks-have-no-spectre-v1-fence-and-smap-is-optional).I also scanned the 378 open defects the triage left unflagged, by slug and triage note, and read the candidates. I read the five defects filed since the triage base
a0e8f1333and the findings the triage never classified.Disagreements with the triage
The triage letters are X=security, D=data-loss, T=hang and U=kernel-from-userland.
Flag removed (20).
a-corrupt-chain-met-by-a-queued-free-is-answered-by-the-next-calla-disk-plugged-in-after-settling-is-routed-as-soon-as-it-is-offereda-file-server-waits-30-s-on-a-block-port-nobody-serves-and-says-nothinga-held-launcher-that-will-not-open-is-a-direct-spawna-replayed-bcachefs-node-past-seven-nodes-is-refusedbcachefs-reclaim-reserves-are-sized-for-common-rewritesthe-bcachefs-btree-room-bound-counts-no-reclaim-cascadea-stick-that-answers-late-is-broken-by-the-two-second-abandona-t14-boot-said-rebooting-and-the-host-never-came-backa-threads-kernel-stack-has-no-guard-pagean-executables-relro-stays-writablex86-64s-boot-map-is-writable-and-executablea-working-directory-path-reads-its-dot-dot-off-the-textevery-job-test-runner-starts-holds-its-whole-system-capabilitytest-runner-holds-logread-where-no-log-builtin-runsa-process-name-is-written-into-the-kernels-own-records-unsanitiseda-stops-file-sync-and-its-failure-are-never-recordedspawn-thread-disagrees-about-a-reaped-parentthe-nvme-driver-resets-a-drive-that-is-slow-and-healthyFlag changed (4).
a-claimed-function-can-storm-its-cpua-late-write-from-a-released-function-halts-the-machinea-cut-bulk-only-command-does-not-brick-the-benchs-stickthe-shell-runs-a-command-whose-redirect-it-could-not-openFlag added where the triage had none (23).
one-diskserver-session-can-hold-every-device-slotkeeps the triage'ssecurity, under the denial-of-service ruling below.security:intels-store-forwarding-predictor-times-constant-time-code-by-its-data(filed after the triage)the-avx2-poly1305-runs-under-intels-mxcsr-dependent-timing(filed after the triage)user-pointer-checks-have-no-spectre-v1-fence, which succeeds the closed record the triage flaggeda-driver-that-reflashes-its-device-escapes-its-isolationa-received-handle-has-no-knowable-typea-driver-that-lends-its-device-a-handle-a-peer-sent-is-ended-when-it-is-no-regiona-class-claims-poll-in-flight-lands-after-the-claims-releasenetstack-lookup-slots-have-no-per-client-sharenetstacks-places-are-one-number-for-every-client. These two are the same class asone-program-that-fills-a-servers-table-holds-every-other-client-out.no-entry-or-switch-clears-the-bhb-fills-the-rsb-or-issues-an-ibpb,no-program-runs-with-speculative-store-bypass-disabled,indirect-branches-and-returns-run-without-thunks,spec-ctrl-and-gds-stay-as-firmware-left-them.data-loss:a-reallocated-extent-on-data-keeps-the-deleted-files-bytes(measured, never shown fixed)a-forced-reboots-last-userland-lines-miss-the-consolekernel-from-userland:a-claim-spends-device-addresses-its-slot-never-gets-back: a holder that claims, allocates and dies in a loop leaks remapping tables untilTables::allocpanics the kernel (review r1).hang:a-cpu-that-stops-passing-takes-the-console-with-it-when-its-driver-is-queued-there(a finding, renamed on main)libc-childrens-tty-interrupt-can-stall-at-the-nested-shells-line(added after the rebase)the-console-input-path-can-stop-after-a-ps2-overflowspawned-process-never-startspulling-the-boot-stick-freezes-the-t14t14-desktop-froze-at-64sa-panic-reentry-inside-a-fatal-paths-console-hold-halts-with-it-heldConsidered and left unflagged:
no-rule-decides-l1tf-mitigation-for-an-affected-intel-cpuandtsx-stays-as-firmware-left-it: neither names a supported machine that is affected.the-i8042s-holder-holds-the-machines-reset-lineandthe-acpi-servers-holder-drives-the-embedded-controller-unfiltered: these are privileges the signed image grants inside the trusted base.Review round 1
data-lossclause narrowed to the reviewer's test;kernel-from-userlandadded toa-claim-spends-device-addresses-its-slot-never-gets-back;tsx-stays-as-firmware-left-itand the process-name record dropped;data-lossdropped froma-stops-file-sync-and-its-failure-are-never-recorded; the README query comments shortened.securitydefinition andone-diskserver-session-can-hold-every-device-slotis flagged. This is the coordinator's ruling and still needs the owner's confirmation. If he rules the other way, six records losesecurity: that one,no-physical-memory-fairness,four-shares-take-a-file-server, both netstack records andone-program-that-fills-a-servers-table-holds-every-other-client-out.Rebase onto main (
ce3e5e4de)a-bounded-post-spends-its-wake-on-a-waiter-that-then-dies(hang, fixed by sched: a waiter a kill ends passes on the bounded post it may hold #1168) andthe-console-loses-typed-keystrokes-under-host-load(data-loss, closed by issues: close the load-only records whose tests are deleted #1171).a-woken-thread-can-wait-seconds-on-an-idle-cpu-under-hvfanda-cpu-that-stops-passing-takes-the-console-with-it-when-its-driver-is-queued-there. I re-read main's edits to the flagged records (the console carrier, the forced reboot's lines, the ps2 overflow). Each still supports its flag.kind: tooling, which may not carry the field. Of the unflagged records main modified,libc-childrens-tty-interrupt-can-stall-at-the-nested-shells-linenow carrieshang: its typed line never becomes held, and only the probe's 120 s ceiling ends the run.a-sync-commits-the-entry-of-a-file-whose-pages-were-refusedqualifies fordata-loss: after a stop the file reads blocks that never got its pages.a-refused-carried-file-costs-every-other-files-fsync-or-leaks-its-blocksqualifies fordata-lossbecause of its leak after a stop, by the same standard as the FAT leaks. Consolidate storage around native bcachefs and userland filesystems #1152 should add both when it lands.Checks
cargo run -- --ci host: exit 0,Host(None): 109 step(s), all green. It ran on base783569506with this branch's Markdown edits uncommitted, a tree identical to round 0's heade5fd14458. Every later commit, the rebase ontoce3e5e4deincluded, changes only Markdown underissues/relative to main. The only part of a record a host check reads is astatusline, inbuild/userlandhost.rs, and no commit here changes one. Main's own code changes since that run were checked by their own merges, so I did not rerun. Log: https://github.com/ToyOSOrg/evidence/blob/cfa684c4a2200beb61d71c718f33d26be2af1373/r1/ci-host.logrgqueries above, run on head0fee9ecbb. Their counts are in the table.severity:line sits inside its record's frontmatter. All 72 records arekind: defectorkind: finding.Markdown only, so no image or guest test can change.
Risks
🤖 Generated with Claude Code