Files
erofs-freebsd-out-tree/tests/TC119-data-crc-mismatch.md
T
2026-08-18 09:20:44 +02:00

57 lines
2.0 KiB
Markdown

# Test Case: Uncompressed Data Corruption Boundary
**Test ID**: TC119-data-crc-mismatch
**Category**: Data Integrity Semantics
**Priority**: High
## Objective
Verify the actual EROFS integrity boundary. FLAT_PLAIN payload has no per-file
CRC, so one targeted raw-data bit flip is returned to the caller and detected
only by external byte/hash comparison. A fictional kernel data-CRC error is not
expected.
## Fixture Qualification
```sh
work=$(mktemp -d /tmp/repo22-tc119.XXXXXX)
tests/prepare_error_fixtures.sh "$work/fixtures"
cc -O2 -Wall -Wextra -std=c17 tests/read_probe.c -o "$work/read_probe"
python3 tests/erofs_fixture.py inspect \
"$work/fixtures/raw-data-corrupt.erofs" --path /plain.bin
grep '^raw-data-corrupt ' "$work/fixtures/fixture-evidence.txt"
wc -c "$work/fixtures/valid-plain.erofs" \
"$work/fixtures/raw-data-corrupt.erofs"
sha256 -q "$work/fixtures/raw-data-corrupt.erofs"
```
The mutator resolves `/plain.bin`, proves nonempty FLAT_PLAIN layout, flips bit
`0x80` at file offset 257, records the absolute provider byte, preserves media
size, and verifies that the unchanged superblock checksum remains valid.
## FreeBSD Procedure
```sh
mkdir "$work/mnt"
unit=$(mdconfig -a -t vnode -f "$work/fixtures/raw-data-corrupt.erofs")
mount -t erofs -o ro "/dev/$unit" "$work/mnt"
source_hash=$(sha256 -q "$work/fixtures/source/plain.bin")
mounted_hash=$(sha256 -q "$work/mnt/plain.bin")
test "$source_hash" != "$mounted_hash"
"$work/read_probe" pread "$work/fixtures/source/plain.bin" 257 1 \
"$work/source-byte.bin"
"$work/read_probe" pread "$work/mnt/plain.bin" 257 1 \
"$work/mounted-byte.bin"
! cmp -s "$work/source-byte.bin" "$work/mounted-byte.bin"
cmp "$work/fixtures/source/control.txt" "$work/mnt/control.txt"
umount "$work/mnt"
mdconfig -d -u "${unit#md}"
```
## Expected Results
Mount and all reads succeed. The exact target byte and complete file hash differ
from source, while control data matches. No `EIO` or data-CRC diagnostic is
expected. Record source, image, mounted-file hashes, target bytes, dmesg delta,
and cleanup.