⬢ DragonFlyBSD Kernel Audit
DF-4488 / verdict.json
← back to finding ↓ download raw
{
  "finding_id": "DF-4488",
  "status": "untested",
  "reproduced": 0,
  "impact": "none",
  "confidence": "speculative",
  "verdict": "Lock-domain mismatch: vo destroy paths (acpi_video_detach :300-304, REPROBE destroy loop :389-395) hold only the video serial while all four vo sysctl handlers (:754,:774,:815,:858) hold only video_output; sysctl_ctx_free cannot stop an in-flight handler. A firmware REPROBE destroying an output racing a sysctl read frees vo/vo_levels under the reader: the world-readable levels oid then runs sysctl_handle_opaque on freed memory (unpriv kernel-heap disclosure) and the brightness handler can write vo->vo_brightness into freed memory (:800). vo_active_sysctl also reads vo->handle before locking (:751-753). Speculative: single microsecond-scale window per destroy event; not reliably demonstrable on the guest, but the missing mutual exclusion is plain in the source.",
  "exploit_chain": "",
  "evidence": "VERDICT.md (lock analysis with path:line)",
  "kernel_refs": [
    "sys/dev/acpica/acpi_video/acpi_video.c:301",
    "sys/dev/acpica/acpi_video/acpi_video.c:389",
    "sys/dev/acpica/acpi_video/acpi_video.c:754",
    "sys/dev/acpica/acpi_video/acpi_video.c:867"
  ],
  "poc_changes": "",
  "attempts": 0,
  "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": 0,
  "guest_dirty": 0,
  "build_cmd": "",
  "run_cmd": "",
  "code_hash": "",
  "notes": "Race window ~instructions wide; would need repeated destroy/recreate churn of outputs to ever hit.",
  "recommended_fix": "Take ACPI_SERIAL_BEGIN(video) in the vo sysctl handlers (or video_output in vo_destroy) so destroy and handler execution are mutually exclusive",
  "fix_status": "not_testable",
  "fix_baseline_reproduced": 0,
  "fix_patched_reproduced": 0,
  "fix_verdict": "Speculative race; not runtime-tested.",
  "fix_evidence": ""
}