11 KiB
repo22 G2 Full Manual Regression Report
Started: 2026-08-09 06:07 UTC
Completed: 2026-08-09 07:10 UTC
Baseline: cd0e985b5ac54a4b7acb7042422329ad1729fb3e
Branch: manual-g2-20260809T060709Z
Guest: FreeBSD 15.0-RELEASE-p8 amd64, QEMU TCG, isolated port 9223
Overlay: /work/build/repo22-manual-g2-20260809T060709Z-freebsd15-overlay.qcow2
Scope and Result
The exact assigned set was executed manually from the numbered Markdown procedures. No CI, runner, result wrapper, or unassigned TC was used.
| Test | Result | Primary evidence |
|---|---|---|
| TC002 | PASS | Real CRC32C ranges; valid mount; bad covered byte ERR#97 |
| TC008 | PASS | Bad magic ERR#22; 1023-byte provider ERR#6; empty md EINVAL |
| TC010 | PASS | Qualified 16 TiB sparse provider; exact 64-bit df total |
| TC015 | PASS | Bad block size/root/feature returned 22/97/45 |
| TC016 | PASS | Checksum-field-only mutation returned ERR#97 |
| TC017 | PASS | Raw union fields; short ERR#6; qualified sparse mount |
| TC018 | PASS | Exact read at physical offset 17592191561728 |
| TC112 | PASS | Bad magic field returned ERR#22 before root load |
| TC113 | PASS | Resolved inode openat returned ERR#45 |
| TC114 | PASS | OOB FLAT_PLAIN read returned ERR#97 |
| TC115 | PASS | Future algorithm bit returned ERR#45 |
| TC116 | PASS | FBT decompressor entry count 1; read returned ERR#5 |
| TC119 | PASS | FLAT_PLAIN changed byte/hash returned without kernel error |
Count: 13 assigned, 13 PASS, 0 KERNEL-FAIL, 0 SHELVED, 0 ENV, 0 duplicate, 0 omitted, 0 extra.
Build and Guest
Both configurations were built natively in the isolated guest with kernel
-Werror, FREEBSD_SRC=/tmp/repo22-freebsd15-src, and FreeBSD source
15.0-RELEASE-p9. The running guest was 15.0-RELEASE-p8.
| Configuration | KLD SHA256 | Result |
|---|---|---|
WITH_ZSTDIO=0 |
482e9c072c949f0459c422aa1efd9b35a2d99cf90b25bb01e59e00b440b6d0fe |
PASS |
WITH_ZSTDIO=1 |
8349c97c7ced253fff32a9e706f29313f309cb63a270e4e39a4501426f2b95c6 |
PASS |
The ZSTDIO KLD was loaded as ID 5 and was the only repo22 test KLD. It had the
expected FreeBSD ZSTD_* references and no unresolved bcmp. The disabled KLD
had neither ZSTD_* nor bcmp unresolved symbols.
Fixture Qualification
tests/prepare_error_fixtures.sh ran twice in independent empty host
directories with erofs-utils 1.8.6. Both SHA256SUMS files were identical and
self-verified. Every field mutation records its exact field/path and old/new
value. Same-size corruption variants preserve provider length; short and empty
providers record their intentionally different lengths.
The helper independently proved the 4096-byte-block checksum forms:
canonical: field 1028 cleared, CRC32C [1024,4096), initial 0xffffffff
kernel: CRC32C [1032,4096), seed 0x5045b54a
valid control: stored=canonical=kernel=0xf7429681
Raw transcripts, build logs, KLDs, guest logs, fixture trees, and the overlay
remain untracked under /work/build/repo22-manual-g2-20260809T060709Z*.
TC002
Result: PASS.
Commands: helper inspect; sha256; dynamic mdconfig; valid mount/cmp;
direct negative mount; independent truss.
Hashes: valid eb97860671931c76a171d13caa70ddc2c9731c6cdef1e99b9a3deb580baf70ae;
bad CRC 3f684e8cb03e3cb20a1920dccf23d9b7b19bc09d5745be04608e195c541ebf73.
Both were 7622656 bytes. The corruption changed byte 1088 without recomputing
CRC; calculated checksum became 0x202160ab while stored remained 0xf7429681.
Valid data matched; bad direct mount rc was 1 and nmount returned errno 97.
Cleanup: mount absent and exact md detached.
TC008
Result: PASS.
Commands: wc -c, sha256, dynamic mdconfig, direct mount, and truss
for each attachable provider.
Hashes: bad magic d1bc3aec03c58dae1b74b54d895c0a72e5b3088f05907ab2f6a0cb8dc38a615f;
1023-byte provider 5724796860baa23469b3118eff2567c96a0b64b7dadaf99eafb7ba3c65b9aa56;
empty provider e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855.
Bad magic returned errno 22. The 1023-byte md attached and mount returned errno
6. The zero-byte provider was rejected by mdconfig with EINVAL. Cleanup:
zero mounts and md units after all three subcases.
TC010
Result: PASS, not SHELVED.
Commands: copy qualified prefix, truncate -s 17592193667072, stat, dynamic
mdconfig, diskinfo, mount, df -kT, df -iT, and cmp.
Prefix hash: d3ffadc6fc9e73f85a8a5973b4ac5ee2a2da57b4e8baeccd259fa4325a2146cf.
Fields were blocks_hi=1, blocks_lo=1861, rootnid_8b=36, and
total_blocks=4294969157. The sparse file allocated 15232 UFS blocks while
GEOM reported all 17592193667072 bytes. df -k total and Used were exactly
17179876628; Avail was zero. Cleanup: unmounted, md detached, sparse provider
removed. The former environmental issue is now RESOLVED.
TC015
Result: PASS.
Commands: evidence/hash/length checks; three dynamic md attachments; direct
mount status followed by independent truss errno capture.
Hashes: bad block size b5c52c44ace6f693e39161102acde157efec2fce34eb4fef198681dfc7942b58;
bad root 9cdd61eb99b2e7f45d2505b3b95d6427f8f636e117b5ffabed064a3f83997d55;
unknown feature 95d19a490c38657a8c579a10f1f12088ab43c1819aa9b37ae86b841bb26a592a.
All were 7622656 bytes with recomputed valid CRC. Direct mount rc was 1 for
each; nmount returned 22, 97, and 45 respectively. Cleanup: zero mounts/md.
TC016
Result: PASS.
Commands: field evidence, sha256, wc -c, direct mount, and truss.
Hash: 04249f6b7d9b7322c171f1727408130d23cb0b83709aad7a4b77b39358a8dfe6.
The 7622656-byte image changed only checksum 0xf7429681 -> 0xf7429680.
Direct mount rc was 1 and nmount returned errno 97. Cleanup: no mount/md.
TC017
Result: PASS with both negative guard and positive dynamic coverage.
Commands: raw od at offsets 1038/1060/1136; small-prefix mount; sparse
provider creation; diskinfo; positive mount; cmp; df -kT.
Hash: d3ffadc6fc9e73f85a8a5973b4ac5ee2a2da57b4e8baeccd259fa4325a2146cf.
Raw values were high 1, low 1861, root 36. The short prefix returned errno 6.
The qualified provider mounted and reported exactly 17179876628 one-KiB
blocks. Cleanup: unmounted, detached, sparse provider removed.
TC018
Result: PASS with real I/O above 16 TiB.
Commands: sparse provider creation; high-offset dd; two raw read_probe
calls; low-decoy and high-source cmp/hash; dynamic md mount and mounted hash.
Prefix hash: cfd86ed1e39528d958e32819282c7fd87191f80a25d9575078dad473f40563a8.
The inode encoded startblk_hi=1, low 1347, combined block 4294968643, and
physical offset 17592191561728. The original low payload at 5517312 was zeroed:
its hash was 6a4875ddaceaa91fb3369f0f6d962f77442daf1b1d97733457d12bcabdf79441.
Raw high and mounted hashes both matched source
25eb31e024bc60745d68a5f7318753951804c7858b576cb698a4260af4a334a3.
Cleanup: unmounted, detached, sparse provider and probe outputs removed.
TC112
Result: PASS.
Commands: raw magic od, hash/length, direct mount, and truss.
Hash: d1bc3aec03c58dae1b74b54d895c0a72e5b3088f05907ab2f6a0cb8dc38a615f.
Magic was 0x21444142; provider length remained 7622656. The canonical CRC was
invalid as required after changing magic, while the unchanged production
suffix checksum still matched 0xf7429681. Direct rc was 1 and nmount
returned errno 22. Cleanup: no mount/md.
TC113
Result: PASS.
Commands: structured path inspection; mount/control cmp; direct and trussed
read_probe expect-error ... 45; second control cmp.
Hash: 28d972c4065927326607fcd51dabff81cc88a28e2343f6056e55d04418172814.
Resolved NID 52 at inode offset 1664 changed format 0x0001 -> 0x8001 with
valid CRC and equal provider length. openat returned errno 45; unaffected data
remained exact. Cleanup: clean unmount and md detach.
TC114
Result: PASS.
Commands: path inspection; mount/control cmp; direct and trussed
read_probe expect-error ... 97; second control cmp.
Hash: 2afcb9dde4c8eaf30bb2541d00be36f726f5cf151d887e0d999803b3993285ed.
NID 54 field offset 1744 changed start block 1349 -> 1861, equal to declared
blocks, with valid CRC and equal media size. Target read returned errno 97;
control remained exact. Cleanup: clean unmount and md detach.
TC115
Result: PASS.
Commands: raw field od, hash/length, direct mount, and truss.
Hash: a8d7d9cf0abcf34a5cd2366059c0294e08fdd20d02ed3b5b21005ddf78c69029.
available_compr_algs at byte 1106 changed 0x0000 -> 0x8000; CRC was
recomputed and media remained 716800 bytes. Direct rc was 1 and nmount
returned errno 45. Cleanup: no mount/md.
TC116
Result: PASS with direct decompressor-path proof.
Commands: parsed dump.erofs -e evidence; failed userspace extraction record;
mount/control cmp; FBT enumeration and count; direct/trussed read_probe.
Hash: f442785ea7cdbdc3f64b2ff89ea04942460cbdc5bea5615cbed237029edda8d8.
The equal-length 716800-byte image changed 64 bytes at 4128, wholly inside the
parsed first physical extent [4096,69632). Mount succeeded, excluding the
media-size precheck. fbt:erofs-zstdio:z_erofs_decompress:entry counted one
call for the target command, and read returned errno 5. Control remained
exact. Cleanup: unmounted/detached; dtraceall and dependencies unloaded.
TC119
Result: PASS with the revised real integrity semantics.
Commands: path/field evidence; image/source hashes; mount; complete mounted
hash; two one-byte read_probe calls; byte compare; control cmp.
Hash: 74b54f998481f9e55b30f2393ee780e3b46144157a54b4dc0fc0c044c160bb5a.
The equal-length image flipped /plain.bin file offset 257 at provider byte
5525761 from 0x00 to 0x80; the valid superblock CRC remained unchanged.
Source hash was 5647f05ec18958947d32874eeb788fa396a05d0bab7c1b71f112ceb7e9b31eee;
mounted hash was e98bb2acaecb24ab86112478bc8cc1e3668c127b449fe2e664dc4804f9477d81.
Reads succeeded, the target byte differed, and control matched. Cleanup: clean
unmount and md detach.
Harness Notes
Four incomplete attempts were discarded and are not PASS evidence:
- TC002 repeated host Python inspection in a guest without Python and exited before md attachment.
- TC002 initially trusted
trusswrapper status; the qualified run separated direct mount rc from syscall tracing because FreeBSDtruss -oreturned 0 around a failing mount. - TC008 had a stray patch marker after its second subcase; trap cleanup ran and the complete three-subcase command was repeated.
- TC010 initially asserted the
dfUsed column was free blocks; the qualified run used the correctf_bfree=0interpretation and repeated all steps.
Final Cleanup
Per-TC cleanup ended with zero EROFS mounts and zero md providers. Global dmesg
changed from 102 to 104 lines; both new lines were the expected
md0: truncating fractional last sector by 511 bytes from TC008. New panic,
fatal trap, page fault, general-protection fault, and double-fault count was
zero. The exact test KLD unloaded successfully, leaving zero EROFS modules.
The guest shut down normally and QEMU PID 285696 exited after 12 seconds. Port
9223 no longer has a VM process.
Issues
No kernel issue was found and no TC remains SHELVED. The former TC010 provider
issue is retained as a resolved record in
issues/TC010-48bit-statfs-large-provider.md.