DF-3105 / verdict.json
{ "finding_id": "DF-3105", "status": "not_reproduced", "reproduced": 0, "impact": "none", "confidence": "certain", "verdict": "Empirically refuted as unreachable on the current tree, with a crafted >4GB image proving both gates. A UDF image with a 5.37GB file (5x0x3FFFF000 extents + 8KB, markers 0xBB/0x55/0xCC placed) mounts fine and stat reports the full 64-bit size (5368696832), but: (1) read() at offsets >= 2^31 never reaches udf_bmap_internal - the int fsize truncation (udf_read :396, DF-0833 territory) clamps the loop first (pread at 0x100000000 returns 0/EOF silently); (2) mmap of ANY UDF file returns EINVAL because the filesystem never calls vinitvmio - vp->v_object stays NULL and vm_mmap.c:271 rejects (verified with mmap at offset 0). With the only two callers (udf_read path gated below 2^31 by the int fsize, mmap disabled entirely) unable to present an offset >= 2^32, the uint32 parameter truncation at udf_bmap_internal:1066 is dead on DragonFly today. The width bug is real latent code (FreeBSD takes off_t).", "exploit_chain": "", "evidence": "VERDICT.md + run.log + sources", "kernel_refs": [ "sys/vfs/udf/udf_vnops.c:399", "sys/vfs/udf/udf_vnops.c:845", "sys/vfs/udf/udf_vnops.c:1066", "sys/vm/vm_mmap.c:271" ], "poc_changes": "adjusted from finding sketch to guest syscall/layout reality", "attempts": 2, "guest_uname": "DragonFly dfbsd 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": 60, "guest_dirty": 0, "build_cmd": "guest: cc -O2 -o <bin> <src>.c -pthread", "run_cmd": "see README.md", "code_hash": "237dd46ae2c61e3a10b462fc00d4ebba00f9bee3230164ac67ff7e15ddef88cb", "notes": "fix_status: not_testable (not reproduced)", "recommended_fix": "diff: widen udf_bmap_internal/udf_readatoffset to off_t and fix the int fsize in udf_read (overlaps DF-0833); add vinitvmio in udf_vget if mmap support is intended.\n" } |