Files
libfreemkv/docs/unlock-bridge.md
T
Matthew Jackson 6e14fc0c0c libfreemkv: 1.7.0 groundwork — sector-recycle soundness + CI hardening
Security
- Remove the unsafe Vec::set_len over recycled sector buffers — UB reachable
  from safe code (GHSA-j8ww-f5fg-9pmh, low). Uses Vec::resize; pooling unchanged.

CI / tooling
- clippy on stable with the MSRV single-sourced from Cargo.toml; cargo-deny
  dependency-audit gate with first-party git sources allowed (#15); audience-based
  comment-guard (#17).

Docs
- README (keydb ownership, BD-J parser count), drive-access transport/reset
  notes, mux timeline module-doc links.
2026-09-02 12:40:55 -07:00

1.2 KiB

unlock_bridge

Bridges libfreemkv's drive layer to the freemkv-unlock crate: one generic SCSI-transport adapter, identity/host-cert mapping, and the dispatch that news up all_unlockers() and runs the first matching one. libfreemkv names no individual unlocker — it only calls this bridge.

Dispatch

Result of a capability dispatch: (matched_name, result). matched_name is the unlocker that handled it (or "" if none did) — lets the caller record WHICH unlocker ran (e.g. MT1959 vs Renesas), distinct from the id-only identity lookup unlocker_name. Iterating stops at the first unlocker whose capability method returns anything other than NotApplicable — i.e. an actual unlock (Ok) OR a real failure such as a dead bus (Err(Transport)), which the caller must surface rather than skip.

unlocker_names

The names of every REGISTERED unlocker, in dispatch order. Registry-driven — sourced from all_unlockers(), so adding/removing an unlocker updates every report with no other change (no hardcoded names). The per-unlocker "did it run this rip" outcome is computed by the caller, which has the disc + drive runtime state this crate cannot see.