Files
erofs-freebsd-out-tree/tests/TC002-superblock-crc32c.md
T
2026-08-13 10:44:59 +02:00

2.3 KiB

Test Case: Superblock CRC32C Validation

Test ID: TC002-superblock-crc32c Category: Filesystem Metadata Priority: Critical

Objective

Verify the real EROFS superblock checksum field and both equivalent checksum ranges, then prove that a valid image mounts while an equal-length image with one covered byte changed and no checksum update is rejected.

Fixture Qualification

Run from the repo22 root with erofs-utils 1.8.6:

work=$(mktemp -d /tmp/repo22-tc002.XXXXXX)
tests/prepare_error_fixtures.sh "$work/fixtures"
python3 tests/erofs_fixture.py inspect "$work/fixtures/valid-plain.erofs"
python3 tests/erofs_fixture.py inspect "$work/fixtures/bad-super-crc.erofs"
grep '^bad-super-crc ' "$work/fixtures/fixture-evidence.txt"
(cd "$work/fixtures" && sha256 -c SHA256SUMS)

For a 4096-byte block, the canonical calculation clears the little-endian checksum at absolute byte 1028 and calculates CRC32C over bytes [1024,4096) with initial value 0xffffffff. The production verifier uses seed 0x5045b54a over [1032,4096). The helper must print identical canonical and kernel values, equivalent=True, and valid=True for the control. The bad image changes byte 1088, preserves provider length, does not recompute CRC, and must print valid=False.

FreeBSD Procedure

mkdir "$work/mnt"
unit=$(mdconfig -a -t vnode -f "$work/fixtures/valid-plain.erofs")
mount -t erofs -o ro "/dev/$unit" "$work/mnt"
cmp "$work/fixtures/source/control.txt" "$work/mnt/control.txt"
umount "$work/mnt"
mdconfig -d -u "${unit#md}"

unit=$(mdconfig -a -t vnode -f "$work/fixtures/bad-super-crc.erofs")
set +e
mount -t erofs -o ro "/dev/$unit" "$work/mnt" \
  >"$work/bad-mount.out" 2>"$work/bad-mount.err"
mount_status=$?
set -e
printf 'mount_status=%s\n' "$mount_status"
test "$mount_status" -ne 0
set +e
truss -o "$work/bad-mount.truss" mount -t erofs -o ro "/dev/$unit" \
  "$work/mnt" >/dev/null 2>&1
set -e
grep -E 'nmount.*ERR#97' "$work/bad-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

The control mounts and reads exactly. The bad image fails with FreeBSD errno 97 (EINTEGRITY) and no mount remains. Record both image hashes, provider lengths, checksum values/ranges, command status, new dmesg lines, and cleanup.