DF-3020 / verdict.json
{ "finding_id": "DF-3020", "status": "not_reproduced", "reproduced": 0, "impact": "none", "confidence": "speculative", "verdict": "Two attempts to force getnewvnode failure inside the ptmx clone path: (1) kern.maxvnodes=300 with 217,405 open/close cycles - zero failures, vnlru kept recycling; (2) kern.maxvnodes=120 while holding 1,001 ptmx fds open - further opens fail with ENODEV from the pty driver unit limit (bitmap exhausted near 1000 units), which fires inside the clone handler BEFORE devfs_allocv, so the ignored-error path is never reached. The NULL-deref code path is real (devfs_allocv can return error leaving *vpp NULL; devfs_vop_nlookupdotdot:535 and devfs_spec_open:933 ignore the return) but getnewvnode could not be made to fail from unprivileged pressure on this guest.", "exploit_chain": "", "evidence": "VERDICT.md + run.log + sources", "kernel_refs": [ "sys/vfs/devfs/devfs_vnops.c:535", "sys/vfs/devfs/devfs_vnops.c:933", "sys/vfs/devfs/devfs_core.c:328" ], "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": "758302c47ede0b6869ce6aedf0208c086f567d7ab460b2ae24c7f649d95dc30e", "notes": "fix_status: not_testable (not reproduced)", "recommended_fix": "diff: check devfs_allocv return in devfs_vop_nlookupdotdot (bail ENOENT) and in devfs_spec_open clone path (treat as failed clone, vput orig).\n" } |