diff options
| author | tv <tv@krebsco.de> | 2026-11-08 13:48:01 +0000 |
|---|---|---|
| committer | tv <tv@krebsco.de> | 2026-11-08 15:03:52 +0100 |
| commit | 40907ae285317eaaf6449ff17d40b58a1a5df665 (patch) | |
| tree | 0252700cf4b4dfbfb8e2312db26ee1a163ad7e22 /src/swarm | |
| parent | 46e6b42278db1a3f51d1f5e1fe887f74ed2b69db (diff) | |
screen: a signature vouches for its change and what it builds on
Review finding 5: vouching by (actor, seq) isn't bound to a hash. A
member can make a change under another member's actor at a seq that
member's signature covers. The change is then taken as vouched, and if
it breaks a rule, the honest member is refused as a whole and logged as
the one whose own change broke the rules.
A signature now vouches for its change and the changes of its actor it
builds on: in the document, as before; among received changes, those
it reaches through the batch's dependencies. A received change under an
actor at a seq whose change the document holds (a signature verified up
to it) is a fork: refused as forged, never as its actor's node's, not
told back in REFUSALS, and logged with the peer that brought it.
Diffstat (limited to 'src/swarm')
| -rw-r--r-- | src/swarm/sync.rs | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/src/swarm/sync.rs b/src/swarm/sync.rs index ef2c1b3..ffdbf07 100644 --- a/src/swarm/sync.rs +++ b/src/swarm/sync.rs @@ -661,6 +661,9 @@ pub(crate) async fn handle_sync( )?; refused_again = outcome.refused_again; roots = outcome.roots; + if outcome.forged > 0 { + tracing::warn!(peer = %peer, forged = outcome.forged, "A peer brought changes forged under another node's actor: refused"); + } } sync.receive_logged(doc, message, log) })(); |
