Files
erofs-freebsd-out-tree/tests/TC119-data-crc-mismatch.md
T
2026-08-13 10:44:59 +02:00

2.0 KiB

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

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

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.