53 lines
1.5 KiB
Markdown
53 lines
1.5 KiB
Markdown
# Test Case: Superblock CRC Field Mismatch
|
|
|
|
**Test ID**: TC016-superblock-crc-invalid
|
|
**Category**: Error Handling
|
|
**Priority**: High
|
|
|
|
## Objective
|
|
|
|
Verify that changing only the stored superblock checksum field causes
|
|
`EINTEGRITY`, with all protected bytes and provider length unchanged.
|
|
|
|
## Fixture Qualification
|
|
|
|
```sh
|
|
work=$(mktemp -d /tmp/repo22-tc016.XXXXXX)
|
|
tests/prepare_error_fixtures.sh "$work/fixtures"
|
|
grep '^bad-checksum-field ' "$work/fixtures/fixture-evidence.txt"
|
|
python3 tests/erofs_fixture.py inspect \
|
|
"$work/fixtures/bad-checksum-field.erofs"
|
|
wc -c "$work/fixtures/valid-plain.erofs" \
|
|
"$work/fixtures/bad-checksum-field.erofs"
|
|
sha256 -q "$work/fixtures/bad-checksum-field.erofs"
|
|
```
|
|
|
|
The mutator flips bit 0 of the little-endian checksum at absolute byte 1028,
|
|
does not recompute it, asserts checksum invalidity, and changes no other byte.
|
|
|
|
## FreeBSD Procedure
|
|
|
|
```sh
|
|
mkdir "$work/mnt"
|
|
unit=$(mdconfig -a -t vnode -f "$work/fixtures/bad-checksum-field.erofs")
|
|
set +e
|
|
mount -t erofs -o ro "/dev/$unit" "$work/mnt" \
|
|
>"$work/mount.out" 2>"$work/mount.err"
|
|
status=$?
|
|
set -e
|
|
test "$status" -ne 0
|
|
set +e
|
|
truss -o "$work/mount.truss" mount -t erofs -o ro "/dev/$unit" \
|
|
"$work/mnt" >/dev/null 2>&1
|
|
set -e
|
|
grep -E 'nmount.*ERR#97' "$work/mount.truss"
|
|
! mount -p | awk -v path="$work/mnt" '$2 == path { found=1 }
|
|
END { exit found ? 0 : 1 }'
|
|
mdconfig -d -u "${unit#md}"
|
|
```
|
|
|
|
## Expected Results
|
|
|
|
Mount returns errno 97 (`EINTEGRITY`) with a checksum diagnostic. No mount or
|
|
md consumer remains.
|