block: close the range-clamp overflow — a confined caller could wrap into the neighbour
The naive bound `lba + count > r.count` wraps for an lba near u64 max: the sum overflows to a small value, sails under the check, and `base + lba` wraps to an absolute block OUTSIDE the range. Calibrated, it is a real confinement escape — a process confined to [1,3) reads absolute block 0 (the boot sector) with lba = maxInt(u64), since base + lba wraps to 0. The bound is rewritten as two subtractions that cannot overflow: lba within the range, and count within what remains. block-range gains a wrap-refused assertion calibrated to be exploitable against the naive form — it FAILS against the old bound (reads block 0) and passes against the fix (verified by reverting the clamp). Caught pre-emptively before the V2 boundary review.
This commit is contained in:
@@ -1246,6 +1246,7 @@ CASES = [
|
||||
"timeout": 150,
|
||||
"expect": r"(?s)(?=.*block-range: ok in-range-read)"
|
||||
r"(?=.*block-range: ok out-of-range-refused)"
|
||||
r"(?=.*block-range: ok wrap-refused)"
|
||||
r"(?=.*block-range: ok geometry-is-confined)"
|
||||
r"(?=.*block-range: ok confined-cannot-redefine)"
|
||||
r"(?=.*block-range: VERDICT done)",
|
||||
|
||||
Reference in New Issue
Block a user