disc: credit firmware unlock in the bus-encryption gate
The bus-key gate only credited the cert handshake's read_data_key as proof
bus encryption was removed. A firmware unlocker removes it AT THE DRIVE
(serves clear content) and yields no read_data_key — so a SUCCESSFUL
firmware unlock (VID present, read_data_key None) tripped the gate and
blocked ALL key resolution, including the online source. That was the
root cause of live UHD discs reporting "missing keys" after an unlock.
Now a single predicate answers "is bus encryption gone?": never-had-it ||
file/ISO || firmware-unlocked || cert-bus-key. The gate is just
`if !bus_encryption_removed { error }` — no enumerated cases. HandshakeResult
gains `drive_unlocked`, and the read_data_key failure reason is captured so
the warn says WHY the bus key is missing.
Also: reword the first hardware-sense escalation as "fast-fail escalation"
(it is often transient — the drive recovers), reserving "wedge" for a
persistent run; and scrub the product name from core comments (it belongs
only in the unlocker crate).
This commit is contained in:
@@ -531,13 +531,20 @@ pub fn handle_read_error(err: &Error, ctx: &mut ReadCtx) -> ReadAction {
|
||||
);
|
||||
|
||||
if is_wedge_transition {
|
||||
// NOTE: this is the FIRST escalation into the hardware/illegal-request
|
||||
// sense family — NOT a confirmed wedge. Drives frequently recover and keep
|
||||
// reading after one such error (a single bad spot), so calling it a "wedge"
|
||||
// here over-claims (it sent past investigations chasing a drive ghost). A
|
||||
// genuine wedge is PERSISTENT — see the `wedge_skip` / WEDGE_ABORT_THRESHOLD
|
||||
// path below, which only fires after repeated fast-fails with no recovery.
|
||||
tracing::warn!(
|
||||
target: "freemkv::disc",
|
||||
phase = "wedge_transition",
|
||||
phase = "fastfail_escalation",
|
||||
errors_in_zone = ctx.total_errors,
|
||||
ms_since_last_success,
|
||||
new_family = ?current_family,
|
||||
"drive entered wedge / fast-fail family (was returning recoverable medium errors before this)"
|
||||
"drive escalated into the fast-fail sense family (was returning recoverable medium \
|
||||
errors before this) — often transient; only a PERSISTENT run is a real wedge"
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user