⬢ DragonFlyBSD Kernel Audit
DF-4616 / verdict.json
← back to finding ↓ download raw
{
  "finding_id": "DF-4616",
  "status": "not_reproduced",
  "reproduced": 0,
  "impact": "none",
  "confidence": "certain",
  "verdict": "ips_morpheus_poll (ips.c:611) computes its poll deadline as time_uptime + command->timeout, but command->timeout is in watchdog ticks of 10 s (set to 10 at ips.c:601, decremented once per 10 s callout at ips.c:342/369) while time_uptime is seconds - the synchronous completion window is 10 s instead of the intended 100 s. This poll is the crash-dump completion engine (ips_disk.c:322, interrupts disabled), so a controller slower than 10 s (cache-flush-heavy during a crash) makes the dump proceed on unacknowledged writes -> silently corrupted crash dumps or a wedged dump. Arithmetic is certain from source; not reproduced on the audit guest because it requires a morpheus ServeRAID controller (0x1014:0x01BD) as the dump device of a crashing kernel and the guest has none (env.txt). Secondary note: the poll calls ips_morpheus_check_intr without queue_lock (fine in dump context, latent race if ever reused).",
  "exploit_chain": "",
  "evidence": "VERDICT.md (unit proof: ips.c:601 sets timeout=10, ips.c:342+369 decrement once per 10s tick, ips.c:611 deadline = seconds + ticks, ips_disk.c:321-322 sole caller is the dump path); env.txt (no ServeRAID hardware)",
  "kernel_refs": [
    "sys/dev/raid/ips/ips.c:601",
    "sys/dev/raid/ips/ips.c:607",
    "sys/dev/raid/ips/ips.c:611",
    "sys/dev/raid/ips/ips.c:342",
    "sys/dev/raid/ips/ips.c:369",
    "sys/dev/raid/ips/ips_disk.c:322"
  ],
  "poc_changes": "none - no PoC possible; requires morpheus ServeRAID dump device on crashing hardware.",
  "attempts": 1,
  "guest_uname": "DragonFly dfbsd 6.5-DEVELOPMENT #0: Thu Jul 2 06:02:54 UTC 2026 x86_64",
  "runtime_sec": 0,
  "guest_dirty": 0,
  "build_cmd": "",
  "run_cmd": "",
  "code_hash": "",
  "notes": "ips_copperhead_poll (ips.c:810-814) is a kprintf stub - the copperhead dump path has no completion mechanism at all, confirming this path is untested by design. Low severity: crash-dump integrity only.",
  "recommended_fix": "Scale the poll deadline to seconds: ts = time_uptime + (uint32_t)command->timeout * 10.",
  "fix_status": "not_testable",
  "fix_baseline_reproduced": 0,
  "fix_patched_reproduced": 0,
  "fix_verdict": "No ServeRAID dump device on the guest; A/B kernel run impossible. fix.diff is a one-line unit correction with no behavioral risk.",
  "fix_evidence": "fix.diff (ips.c:611 deadline scaled by the 10 s watchdog period)."
}