1.1.1: align online MKB cap with libfreemkv read cap (64 MiB) + log over-cap
The online source dropped any MKB over 10 MiB while libfreemkv's reader captures up to 64 MiB — an MKB in that band was silently un-forwardable (no key, no surfaced cause). Match the cap and log when it is exceeded.
This commit is contained in:
+14
-2
@@ -9,7 +9,11 @@ use libfreemkv::aacs::{UnitKey, Vuk, uk_from_vuk};
|
|||||||
use libfreemkv::keysource::ResolveCtx;
|
use libfreemkv::keysource::ResolveCtx;
|
||||||
use libfreemkv::{Error, KeySource};
|
use libfreemkv::{Error, KeySource};
|
||||||
|
|
||||||
const MAX_MKB_BYTES: usize = 10 * 1024 * 1024;
|
// Upper bound on the MKB forwarded to the key service — kept in lockstep with
|
||||||
|
// libfreemkv's `read_mkb_content` MAX_BYTES (64 MiB) so an MKB the library is
|
||||||
|
// willing to capture is never silently un-forwardable here (a trimmed MKB
|
||||||
|
// record stream is normally a few MiB; this is headroom, not an expected size).
|
||||||
|
const MAX_MKB_BYTES: usize = 64 * 1024 * 1024;
|
||||||
const TIMEOUT_SECS: u64 = 180;
|
const TIMEOUT_SECS: u64 = 180;
|
||||||
/// Hard cap on the key-service response body. A real unit-key reply is a few
|
/// Hard cap on the key-service response body. A real unit-key reply is a few
|
||||||
/// hundred bytes; bound the read so a malicious/compromised server can't drive
|
/// hundred bytes; bound the read so a malicious/compromised server can't drive
|
||||||
@@ -202,8 +206,16 @@ impl OnlineSource {
|
|||||||
return Vec::new();
|
return Vec::new();
|
||||||
}
|
}
|
||||||
let mkb = ctx.mkb().unwrap_or(&[]);
|
let mkb = ctx.mkb().unwrap_or(&[]);
|
||||||
// An over-cap MKB cannot be forwarded — bound the body.
|
// An over-cap MKB cannot be forwarded — bound the body. Log it: a silent
|
||||||
|
// empty return here is indistinguishable from "no key", so surface the
|
||||||
|
// real cause (the cap is 64 MiB, far above any real trimmed MKB).
|
||||||
if mkb.len() > MAX_MKB_BYTES {
|
if mkb.len() > MAX_MKB_BYTES {
|
||||||
|
tracing::warn!(
|
||||||
|
target: "freemkv::keysource",
|
||||||
|
mkb_len = mkb.len(),
|
||||||
|
cap = MAX_MKB_BYTES,
|
||||||
|
"MKB exceeds the key-service forward cap; skipping the online source for this disc (no key from online)"
|
||||||
|
);
|
||||||
return Vec::new();
|
return Vec::new();
|
||||||
}
|
}
|
||||||
let b64 = base64::engine::general_purpose::STANDARD;
|
let b64 = base64::engine::general_purpose::STANDARD;
|
||||||
|
|||||||
Reference in New Issue
Block a user