Skip to content

orchestrator: Add the SvnFloor anti-rollback capability trait - #28

Closed
chrysh wants to merge 3 commits into
mainfrom
add-svn-floor
Closed

chrysh wants to merge 3 commits into
mainfrom
add-svn-floor

Conversation

@chrysh

@chrysh chrysh commented Aug 18, 2026

Copy link
Copy Markdown
Collaborator

SvnFloor is the anti-rollback capability seam: one managed device's durable SVN floor. advance(to) is monotonic (at-or-below is an Ok no-op) and durable on return; storage encoding (OTP fuses, protected flash, mocks) stays behind the trait.

Trait only — implementations and the orchestrator commit path follow in separate PRs.

Part of #18

chrysh added 3 commits August 17, 2026 19:35
One device's durable SVN floor behind the capability seam: floor() and
advance(), monotonic and idempotent so a replayed commit is harmless,
durable when advance returns. Storage encoding (OTP fuse counters,
protected flash) stays behind the trait; PLDM devices that commit
internally simply have no eRoT-side floor. Trait only — the OTP-backed
adapter and the driver's commit_svn_floor executor follow separately.

Assisted-by: Claude:claude-fable-5
Signed-off-by: Christina Quast <christina.quast@9elements.com>
Per review: reading the floor does not require exclusive access.

Assisted-by: Claude:claude-fable-5
Signed-off-by: Christina Quast <christina.quast@9elements.com>
The trait cannot enforce it: one-way encodings get it for free, any
other storage must check itself.

Assisted-by: Claude:claude-fable-5
Signed-off-by: Christina Quast <christina.quast@9elements.com>
@leongross leongross moved this from Todo to In Progress in OpenPRoT PFR Aug 19, 2026
@leongross leongross linked an issue Aug 19, 2026 that may be closed by this pull request
@chrysh

chrysh commented Aug 20, 2026

Copy link
Copy Markdown
Collaborator Author

Superseded: SvnFloor landed upstream (OpenPRoT/openprot main).

@chrysh chrysh closed this Aug 20, 2026
@chrysh
chrysh deleted the add-svn-floor branch August 25, 2026 15:25
chrysh added a commit that referenced this pull request Oct 15, 2026
The pin sat at c709ae4, fifteen commits back. The one that matters here
is UpdateSecurityRevision: the message (#22), its FdOps callback (#27),
the responder that joins them (OpenPRoT#34) and the response checks (#28). All
four are on main, so this pins main's head rather than a PR branch.

Four callbacks became required, so every FdOps implementation gains them.
All of them refuse a pending-component activation and a security revision
commit, and report every component as still functioning, because none of
them has anything else to say yet.

`now()` is one of the four. It used to default to the constant
0xbaddbadd, which froze FD_T1 and FD_T2 for anyone who did not override
it; pldm-lib #18 made it required, and every implementation here now
reads a clock.

Assisted-by: Claude Opus 5
Signed-off-by: Christina Quast <christina.quast@9elements.com>
chrysh added a commit that referenced this pull request Oct 15, 2026
The pin sat at c709ae4, fifteen commits back. The one that matters here
is UpdateSecurityRevision: the message (#22), its FdOps callback (#27),
the responder that joins them (OpenPRoT#34) and the response checks (#28). All
four are on main, so this pins main's head rather than a PR branch.

Four callbacks became required, so every FdOps implementation gains them.
All of them refuse a pending-component activation and a security revision
commit, and report every component as still functioning, because none of
them has anything else to say yet.

`now()` is one of the four. It used to default to the constant
0xbaddbadd, which froze FD_T1 and FD_T2 for anyone who did not override
it; pldm-lib #18 made it required, and every implementation here now
reads a clock.

Assisted-by: Claude Opus 5
Signed-off-by: Christina Quast <christina.quast@9elements.com>
chrysh added a commit that referenced this pull request Oct 15, 2026
The pin sat at c709ae4, fifteen commits back. The one that matters here
is UpdateSecurityRevision: the message (#22), its FdOps callback (#27),
the responder that joins them (OpenPRoT#34) and the response checks (#28). All
four are on main, so this pins main's head rather than a PR branch.

Four callbacks became required, so every FdOps implementation gains them.
All of them refuse a pending-component activation and a security revision
commit, and report every component as still functioning, because none of
them has anything else to say yet.

The five host tests said that identically, so they say it once:
`fd_ops_nothing_to_say!` in tests/common.rs, which they already share.
The two QEMU firmware devices write the callbacks out, because theirs
differ: one reads a real clock and one asks the RoT whether to commit.

`now()` is one of the four. It used to default to the constant
0xbaddbadd, which froze FD_T1 and FD_T2 for anyone who did not override
it; pldm-lib #18 made it required, and every implementation here now
reads a clock.

Assisted-by: Claude Opus 5
Signed-off-by: Christina Quast <christina.quast@9elements.com>
chrysh added a commit that referenced this pull request Oct 15, 2026
The pin sat at c709ae4, fifteen commits back. The one that matters here
is UpdateSecurityRevision: the message (#22), its FdOps callback (#27),
the responder that joins them (OpenPRoT#34) and the response checks (#28). All
four are on main, so this pins main's head rather than a PR branch.

Four callbacks became required, so every FdOps implementation gains them.
All of them refuse a pending-component activation and a security revision
commit, and report every component as still functioning, because none of
them has anything else to say yet.

The five host tests said that identically, so they say it once:
`fd_ops_nothing_to_say!` in tests/common.rs, which they already share.
The two QEMU firmware devices write the callbacks out, because theirs
differ: one reads a real clock and one asks the RoT whether to commit.

`now()` is one of the four. It used to default to the constant
0xbaddbadd, which froze FD_T1 and FD_T2 for anyone who did not override
it; pldm-lib #18 made it required, and every implementation here now
reads a clock.

Assisted-by: Claude Opus 5
Signed-off-by: Christina Quast <christina.quast@9elements.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Archived in project

Development

Successfully merging this pull request may close these issues.

Update anti-rollback params

2 participants