DF-2264 / verdict.json
{ "finding_id": "DF-2264", "status": "reproduced", "reproduced": 1, "impact": "dos", "confidence": "certain", "verdict": "Fully reproduced and fix-validated A/B on the stock INVARIANTS kernel using the real saioctl on fabricated CAM state with a real lockmgr SIM lock. Unknown ioctl on the control device returns EINVAL with the SIM lock still held LK_EXCLUSIVE, and a probe thread parked forever on cam_sim_lock proving the SIM-wide wedge; the interrupted-hold path returns EINTR with the lock equally leaked. With fix2264.diff all early returns route through out_locked and the same calls return with the lock released and the probe acquiring it. Privileged reach only (SYSCAP_RESTRICTEDROOT at scsi_sa.c:451): durable CAM-subsystem wedge, no memory corruption, no info leak, no privesc; Low severity confirmed.", "exploit_chain": "", "evidence": "run_unfixed.dmesg: saioctl returned 22 (EINVAL) SIM lock status AFTER return 2 plus probe thread still BLOCKED after 1s wedge confirmed, and the 2264B block: returned 4 (EINTR) status 2 LOCK LEAKED via scsi_sa.c:912-914; run_fixed.dmesg: status 0 and probe ACQUIRED", "kernel_refs": [ "sys/bus/cam/scsi/scsi_sa.c:849", "sys/bus/cam/scsi/scsi_sa.c:878", "sys/bus/cam/scsi/scsi_sa.c:912", "sys/bus/cam/scsi/scsi_sa.c:914", "sys/bus/cam/scsi/scsi_sa.c:920", "sys/bus/cam/scsi/scsi_sa.c:1345", "sys/bus/cam/cam_periph.c:382" ], "poc_changes": "Replaced seeded sketch with kernel-compiled harness invoking the real saioctl with a real lockmgr lock via fabricated cam_periph and cam_sim and a cdev with si_uminor 1 shl 29 registered through the real cam_extend_set; the interrupted-hold case is driven by a userland sysctl process signalled with SIGUSR1 while cam_periph_hold sleeps in caplck with PCATCH", "attempts": 3, "guest_uname": "DragonFly dfbsd 6.5-DEVELOPMENT #10: Sat Oct 17 20:52:24 UTC 2026 root@dfbsd:/usr/obj/usr/src/sys/X86_64_GENERIC x86_64 (stock INVARIANTS kernel family; harness builds #2-#10)", "runtime_sec": 600, "guest_dirty": 1, "build_cmd": "./build.sh (shared harness kernel; see ../DF-2263)", "run_cmd": "vm.sh run_root sysctl debug.df226x.t2264a=1 ; vm.sh run_root sh -c (sleep 1; kill -USR1 $$) and exec sysctl debug.df226x.t2264b=1", "code_hash": "c5eb0e5a2741c97028f40821deddc7ce6676d21a4f77706c83dd1c749148fb69", "notes": "On the patched side the recorded 2264B run raced the signal so cam_periph_hold succeeded and the normal exit released the lock; the interrupted-hold leak itself is proven on the unpatched kernel and the fix uses the identical out_locked mechanism validated by the 2264A A/B. privesc per team directive: none, privileged-reach durable DoS only", "recommended_fix": "Route the three early returns of the SA_IS_CTRL switch through a common out_locked label that calls cam_periph_unlock before returning", "fix_status": "fixed", "fix_evidence": "run_fixed.dmesg: EINVAL with lock status 0 and probe acquired on patched kernel versus status 2 and permanent wedge on unpatched (run_unfixed.dmesg)" } |