DF-4802 / verdict.json
{ "finding_id": "DF-4802", "status": "not_reproduced", "reproduced": 0, "impact": "none", "confidence": "speculative", "verdict": "initsd()s verify loop (vinumrevive.c:526-565) sets verified=0 on a readback mismatch (:555-560) with no retry bound, so a persistent mismatch spins the ioctl thread in an unbounded, uninterruptible (PCATCH-less biowait) kernel loop. The loop and the missing bound are certain from the code; the mismatch itself was NOT reachable on this guest: a tight pwrite hammer on the raw subdisk device hammering the exact block being initialized produced zero mismatches across three full 3 MB verified inits, because sdio() dispatches via vn_strategy(drive->vp) (vinumrequest.c:981) and the inits write+readback pair is served coherently from the buffer-cache view while the raw physio writer bypasses it. On hardware whose media returns corrupted data (the case verify exists for) the loop provably never exits. Filed Low/speculative: code-certain defect, trigger not demonstrated.", "exploit_chain": "", "evidence": "README.md analysis; initlivelock.c (the attempted trigger); dmesg in the guest session showed zero vinum: init error lines across three full verified inits with the hammer active", "kernel_refs": [ "sys/dev/raid/vinum/vinumrevive.c:526", "sys/dev/raid/vinum/vinumrevive.c:555", "sys/dev/raid/vinum/vinumstate.c:886", "sys/dev/raid/vinum/vinumrequest.c:981" ], "poc_changes": "driver had to re-fill the ioctl msg template every iteration (the IOC_OUT reply overlays the request buffer, clobbering type/state)", "attempts": 3, "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": 300, "guest_dirty": 0, "build_cmd": "cc -O -o /tmp/initlivelock /tmp/initlivelock.c", "run_cmd": "/tmp/initlivelock 0 vol.p0.s0 (after mirrored setup + setstate initializing)", "code_hash": "24668cdcf1a3880d18feddcb9c6c3ef753fd066208af49f24b903e30c70b4c35", "notes": "honest negative result: the unbounded loop is real in code, the natural trigger (concurrent raw writer) is defeated by buffer-cache coherence on this guest; real-media corruption would still hit it", "recommended_fix": "bound the retry: after 3 consecutive mismatches of the same block set error=EIO and verified=1 (draft hunk included in the DF-4800/4801 combined fixwork, not validated separately)", "fix_status": "not_testable", "fix_baseline_reproduced": 0, "fix_patched_reproduced": 0, "fix_verdict": "not validated - the trigger itself was not reachable on this guest, so there is no baseline behavior to flip", "fix_evidence": "" } |