mirror of
https://github.com/rustfs/rustfs.git
synced 2026-08-23 12:49:04 +00:00
3f3ae22bd3
Adversarial review of the replication WORM bypass found a silent unlock: an authorized replication write that carries no source timestamp for a category (the source never held the object, only its tags changed) is not judged by receiver-side LWW, so the metadata replace would drop the destination's legal hold or retention unjudged. Before the bypass that write was merely rejected. Gate the bypass on `replication_write_may_pass_worm_gate`: the write passes only when it carries the source timestamp of every category that currently locks the version, so LWW decides each one; otherwise it stays WORM-rejected. The set layer evaluates the lock gate first so malformed persisted lock metadata still fails closed, and the app-layer pre-check applies the same rule. Refs rustfs/backlog#1953