⬢ DragonFlyBSD Kernel Audit
DF-3741 / verdict.json
← back to finding ↓ download raw
{
  "finding_id": "DF-3741",
  "status": "inconclusive",
  "reproduced": 0,
  "impact": "none",
  "confidence": "certain",
  "verdict": "Two BIOS-gated infinite loops (kernel hang at driver init / first DPM use): (1) radeon_atom_init_mc_reg_table():4023-4045 walks reg_data in usRegDataBlkSize strides; with a BIOS stride of 0 and mem-id mismatch, neither the END sentinel nor the num_ranges<VBIOS_MAX_AC_TIMING_ENTRIES cap can ever trigger \u2014 non-terminating loop; with a nonzero stride the walk scans unbounded past the VBIOS image heap until it stumbles on 0xFFFFFFFF (OOB read). (2) atom_lookup_voltage_object_v3():3423-3429 advances by the objects self-declared usSize; usSize==0 with a type/mode mismatch never advances \u2014 non-terminating. Harness on guest: both replicas fail to terminate within 2^24 iterations (the cap exists only in the harness); a stride-4 control with an END marker terminates in 3. Same source certainty as pass-1 class but distinct functions; no AMD hardware on this guest.",
  "exploit_chain": "crafted VBIOS (VRAM_Info frev2/crev1 with usRegDataBlkSize=0, or VoltageObjectInfo v3 object with usSize=0) -> kldload/boot hangs the kernel in a tight loop -> local DoS (requires VBIOS control)",
  "evidence": "harness_hang.c + build.log + run.log; VERDICT.md; kernel refs sys/dev/drm/radeon/radeon_atombios.c:4023-4045",
  "kernel_refs": [
    "sys/dev/drm/radeon/radeon_atombios.c:4023-4045",
    "sys/dev/drm/radeon/radeon_atombios.c:3423-3429",
    "sys/dev/drm/radeon/radeon_atombios.c:3416-3431"
  ],
  "poc_changes": "harness written from scratch (no seed PoC): verbatim kernel arithmetic replica with canary-guarded destination model, built and executed on the DragonFly guest (cc 8.3); fixed nested-comment, stddef/stdint includes and volatile divisors during bring-up",
  "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": 6,
  "guest_dirty": 0,
  "build_cmd": "./build.sh",
  "run_cmd": "./run.sh (after ./build.sh)",
  "code_hash": "e5e402390555ade481083eabc6dca6ecfbaf23bee73b5f883caddf78e6ac809e",
  "notes": "Guest has NO AMD/radeon GPU (virtio-only); /boot/kernel/radeon.ko exists (code shipped in the default install) but cannot attach, so the kernel code path is unreachable at runtime on this guest. Evidence is source-level certainty (path:line traced) plus a verbatim-arithmetic userland harness compiled and executed on the guest (build.log/run.log).",
  "recommended_fix": "reject zero strides",
  "fix_status": "not_tested",
  "fix_baseline_reproduced": 0,
  "fix_patched_reproduced": 0,
  "fix_verdict": "fix.diff authored after source-level verification; cannot be validated on this guest (no AMD GPU; radeon.ko cannot attach). Compiling the module or booting a patched kernel would not exercise the path without hardware.",
  "fix_evidence": "fix.diff (unified, against read-only sys/ tree; never applied)"
}