57 lines
2.0 KiB
Markdown
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.
|