stop-design-v5 §2.3, second commit of the two-commit shape (UT1-UT9 green): - AACS: aacs1_ake / aacs2_authenticate_p256_with_anchor return the AGID in its AgidGuard; finish_auth takes it and releases on every exit, so the 1.0 AGID is freed before the P-256 fall-through. release_agid is gone: exactly one release per allocation, through execute_cleanup (SS-7). - CSS: the AGID is guarded during the challenge and defused on success, still held for read_disc_key (D9); the pre-allocation invalidate sweep stays on execute, so a Stop refuses it. - MT1959: A's WRITE BUFFER + verify (D8, C_max 35 s) and B's MODE SELECT, READ BUFFER, WRITE BUFFER, F1 (C_max 45 s) run in a CriticalGuard; do_unlock and the retries stay cancellable. - The per-cert backoff uses pause; an interrupted wait aborts as Transport. - The test-only FwFront forwards all four new methods. UnlockError, the Unlocker trait and every public signature are unchanged.
freemkv-unlock
The unlock layer for the freemkv toolchain.
An unlocker removes a drive-level bus-encryption barrier so the drive serves readable (de-bus'd / de-scrambled) sectors. Content-key decryption is a separate concern — the consumer's job.
This crate defines the Unlocker contract and a generic SCSI transport
contract, and holds the self-contained unlocker modules. The consumer
(libfreemkv) depends on this crate and
dispatches through all_unlockers(); it never names an individual unlocker, and
clients of libfreemkv are oblivious to unlockers entirely (as they are to the
SCSI layer).
use freemkv_unlock::UnlockError;
// Drive-prep: try each unlocker's feature unlock until one claims the drive.
// `NotApplicable` means "not this unlocker's drive" — move on; a transport
// error means a dead bus — abort. `unlock_bus` follows the same contract for
// removing per-disc bus encryption.
for u in freemkv_unlock::all_unlockers() {
match u.unlock_features(&mut scsi, &ctx) {
Ok(unlocked) => return Ok(unlocked),
Err(UnlockError::NotApplicable) => continue,
Err(e) => return Err(e),
}
}
To remove an unlocker, delete its module directory and its one line in
all_unlockers() — nothing else changes.
License
freemkv-unlock's own source is MIT — see LICENSE.
src/ld/profiles.json bundles volatile, RAM-only LibreDrive microcode
authored and owned by the MakeMKV team (GuinpinSoft inc.) — Copyright (c)
MakeMKV team, all rights reserved. That microcode is third-party proprietary
material, not covered by the MIT license; no ownership is claimed. See
NOTICE. With thanks to the MakeMKV team for
LibreDrive.