# Pre13 H04 Root Inode Validation ## Scope H04 adds one mount-time format check in `src/super.c`: the decoded root inode must have FreeBSD vnode type `VDIR`. The check runs after packed and metabox inode initialization and before xattr prefix initialization or publication of `mp->mnt_data`. No vnode is created and no permanent root inode reference is retained. ## Error Contract A decodable non-directory root violates the EROFS filesystem structure. The mount therefore fails with positive FreeBSD errno `EINTEGRITY`. This intentionally differs from Linux's negative `EINVAL` return while keeping the same format rejection. `EINTEGRITY` matches the existing FreeBSD EROFS contract for decodable on-disk metadata that violates filesystem invariants. ## Ownership Review - The temporary `struct erofs_node` is stack-owned and has no independent allocations or vnode references. - Decode failures and the type rejection use the existing `fail` path. - `erofs_sb_free()` releases extent-cache state, internal inodes, external devices, and the primary GEOM device in the established reverse order. - The failure occurs before xattr prefixes, mount data, mount flags, or a root vnode are published. - The legal directory-root path is unchanged after the new check. ## Validation Gate The required targeted QEMU validation is: 1. Build and load the current DUT module. 2. Mount the valid paired fixture, verify mode `040755`, read its proof file, and unmount it. 3. Mount the non-directory-root fixture and require exact errno `EINTEGRITY`. 4. Verify mount, md, KLD, and GEOM resources return to zero, then remount the valid fixture. 5. Verify the kernel log has no panic, trap, or lock warning. No full feature suite is part of H04.