DF-3217 / verdict.json
{ "finding_id": "DF-3217", "status": "reproduced", "reproduced": 1, "impact": "none", "confidence": "certain", "verdict": "Reproduced on the stock INVARIANTS guest with a real Linux mke2fs ext4 image (extents flag set, one file hello injected via debugfs): mount -t ext2fs succeeds (EXTENTS is in EXT2F_INCOMPAT_SUPP, ext2fs.h:332-337), then cat/dd/rm of /mnt/hello all fail with EINVAL - ext2_bmap dispatches IN_E4EXTENTS inodes to the ext4_bmapext stub (ext2_bmap.c:84-86 -> :107-111 return (EINVAL);); unlink likewise fails through ext2_ext_truncate. A successful mount of a stock ext4 filesystem is a trap: every regular file is unusable. Post-fix A/B on the F40FIX kernel: the same image is rejected at mount with extents listed as an unsupported optional feature. No memory-safety impact (consistent refusal on all paths).", "exploit_chain": "", "evidence": "VERDICT.md with path:line citations; run.log where a live demo exists; fix.diff", "kernel_refs": [ "sys/vfs/ext2fs/ext2_bmap.c:84", "sys/vfs/ext2fs/ext2_bmap.c:111", "sys/vfs/ext2fs/ext2fs.h:332" ], "poc_changes": "image built on the host (mke2fs -t ext4 + debugfs write), 32MB", "attempts": 1, "guest_uname": "DragonFly dfbsd 6.5-DEVELOPMENT DragonFly 6.5-DEVELOPMENT #0: Thu Jul 2 06:02:54 UTC 2026 root@dfbsd:/usr/obj/usr/src/sys/X86_64_GENERIC x86_64", "runtime_sec": 20, "guest_dirty": 0, "build_cmd": "host: mke2fs -t ext4 + debugfs write (image ext4_3217.img); guest: sh trigger.sh", "run_cmd": "sh trigger.sh (stock kernel: mount succeeds + I/O EINVAL; F40FIX: mount rejected rc=71)", "code_hash": "e662fd002ac82036eb50d399ffb851b2121adf67939a7bef9b68ebffc97b9ee6", "notes": "", "recommended_fix": "remove EXT2F_INCOMPAT_EXTENTS from EXT2F_INCOMPAT_SUPP (mount-time refusal)", "fix_status": "fixed", "fix_verdict": "A/B complete: the ext4 image is now rejected at mount (rc=71, console lists extents as unsupported) instead of mounting and failing every I/O; plain ext2 and read-only ext3 still mount (regression clean)." } |