⬢ DragonFlyBSD Kernel Audit
DF-4096 / verdict.json
← back to finding ↓ download raw
{
  "finding_id": "DF-4096",
  "status": "inconclusive",
  "reproduced": 0,
  "impact": "none",
  "confidence": "certain",
  "verdict": "Hardening (CWE-476), unreachable today: emupchan_init (emu10k1.c:823-828) feeds unchecked emu_valloc() results into emu_vinit(), which writes m->start/m->channel through the pointer (:579-598) \u2014 NULL write if voice exhaustion ever occurs. It cannot occur: pcm_addchan is the only CHANNEL_INIT invoker, pcm_register caps play channels at nchans = audigy?8:4 (:2087,:2139-2141), 2 voices per channel = 16 of the 64-voice pool; vchans use their own class (pcm/vchan.c:240). Filed Info so the latent NULL write is fenced off before anyone raises the channel count.",
  "exploit_chain": "",
  "evidence": "VERDICT.md (reachability proof incl. framework bounds); run.log (no emu10k1 device on guest); fix.diff (NULL check returning NULL to the pcm cores existing failure path)",
  "kernel_refs": [
    "sys/dev/sound/pci/emu10k1.c:823-828",
    "sys/dev/sound/pci/emu10k1.c:552-565",
    "sys/dev/sound/pci/emu10k1.c:574-580",
    "sys/dev/sound/pci/emu10k1.c:2087",
    "sys/dev/sound/pci/emu10k1.c:2139-2141"
  ],
  "poc_changes": "No PoC seed; wrote probe.sh for the guest-side hardware-absence check.",
  "attempts": 1,
  "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": 15,
  "guest_dirty": 0,
  "build_cmd": "",
  "run_cmd": "dfbsd-qemu/vm.sh run_root pciconf -l | grep 1102; ls /dev/snd*; kldload snd_emu10k1",
  "code_hash": "",
  "notes": "DF-3866-family shape (unchecked allocation-index/lifetime feeding a deref) but with the index bounded by framework invariants, not attacker input.",
  "recommended_fix": "Check emu_valloc() results in emupchan_init and return NULL on exhaustion.",
  "fix_status": "not_testable",
  "fix_baseline_reproduced": 0,
  "fix_patched_reproduced": 0,
  "fix_verdict": "fix.diff authored and git-apply-verified; branch is unreachable even on hardware, so no runtime validation is possible by construction.",
  "fix_evidence": "fix.diff (unified, git apply --check OK)"
}