⬢ DragonFlyBSD Kernel Audit
DF-4856 / verdict.json
← back to finding ↓ download raw
{
  "finding_id": "DF-4856",
  "status": "not_reproduced",
  "reproduced": 0,
  "impact": "none",
  "confidence": "likely",
  "verdict": "agp_amd64_via_init (agp_amd64.c:461-462) uses AGP3_VIA_ATTBASE (0x98) as the preserve source for the AGP3_VIA_GARTCTRL (0x90) read-modify-write, loading the VIA secondary AGP bridges GARTCTRL with (gatt physical address | 0x180) and clobbering its size/queue/enable bits, instead of (gartctrl | 0x180). Every analogous RMW in the same file reads the register it writes. The bug is certain in source, inherited byte-identical from FreeBSD (verified release/9.0.0:467-469 and stable/12:464-466), and has no runtime trigger on the audit guest (needs a VIA K8T800-class host bridge + 0:1:0 secondary bridge; QEMU presents only i440FX 0x12378086, so agp_amd64 never probes). Impact ceiling: boot-time misprogramming of GART translation on ~2004 VIA K8 boards - no attacker-controlled input, no memory-safety consequence. Info.",
  "exploit_chain": "",
  "evidence": "VERDICT.md (root cause + upstream diff); upstream_check.txt (FreeBSD release/9.0.0 and stable/12 both carry the identical ATTBASE source read); fix.diff (git apply --check OK)",
  "kernel_refs": [
    "sys/dev/agp/agp_amd64.c:454-463",
    "sys/dev/agp/agpreg.h:98-101"
  ],
  "poc_changes": "no PoC exists for a config-register programming defect; evidence pack is source + upstream comparison",
  "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": 10,
  "guest_dirty": 0,
  "build_cmd": "",
  "run_cmd": "",
  "code_hash": "",
  "notes": "Upstream-inherited (FreeBSD carried it until the files 2021 removal); report to upstream/Dillon as base-code fix. fix_status not_applicable: patch is a one-token register-address correction, validated with git apply --check; no kernel-build validation possible for absent hardware.",
  "recommended_fix": "In agp_amd64_via_init, read the preserve value from AGP3_VIA_GARTCTRL, not AGP3_VIA_ATTBASE (see fix.diff)",
  "fix_status": "not_applicable",
  "fix_baseline_reproduced": 0,
  "fix_patched_reproduced": 0,
  "fix_verdict": "one-token register correction; git apply --check OK against the read-only tree; runtime validation hardware-gated",
  "fix_evidence": "fix.diff"
}