⬢ DragonFlyBSD Kernel Audit
DF-4566 / verdict.json
← back to finding ↓ download raw
{
  "finding_id": "DF-4566",
  "status": "untested",
  "reproduced": 0,
  "impact": "none",
  "confidence": "certain",
  "verdict": "Statically proven: none of the three VCN ring func tables (vcn_v1_0.c:2043-2135) sets .parse_cs/.patch_cs_in_place, so amdgpu_cs.c:833-836 skips ib-contents validation entirely for VCN \u2014 userspace decode messages (session handle, fb buffer addresses/sizes) reach firmware unvalidated, unlike every UVD/VCE ring in the same tree. Dynamically untestable: the audit QEMU guest (X86_64_GENERIC) has no AMD GPU and no /dev/dri, so no PoC could be built or run; the defect is an absence provable by inspection, impact chain (bo-list pinning divergence -> cross-process VRAM corruption; session-handle spoofing; GPU hang) reasoned but not demonstrated.",
  "exploit_chain": "on real Raven APU: open render node -> AMDGPU_CS with AMDGPU_CHUNK_ID_IB on VCN dec ring -> ib embeds crafted decode msg whose fb_buffer_address[] names a mapping absent from the CS bo list (or oversized vs bo) -> job runs without reservation/pinning -> TTM eviction relocates the buffer mid-exec -> firmware DMAs through stale GPUVA -> cross-process VRAM corruption (racy); unconditional variant: bogus session handle / msg fields -> firmware fault -> GPU hang (DoS). Not runnable on the QEMU guest (no AMD GPU).",
  "evidence": "static_proof.txt (rg output: parse_cs present on all uvd/vce rings, absent on all vcn rings; vcn_v1_0.c:2043-2069 ring funcs; amdgpu_cs.c:832-838 gate); VERDICT.md (full narrative incl. VM-addressing severity limiter, vcn_v1_0.c:1372-1378)",
  "kernel_refs": [
    "sys/dev/drm/amd/amdgpu/amdgpu_cs.c:833",
    "sys/dev/drm/amd/amdgpu/vcn_v1_0.c:2043",
    "sys/dev/drm/amd/amdgpu/vcn_v1_0.c:2076",
    "sys/dev/drm/amd/amdgpu/vcn_v1_0.c:2103",
    "sys/dev/drm/amd/amdgpu/vcn_v1_0.c:1372",
    "sys/dev/drm/amd/amdgpu/amdgpu_vcn.c:465",
    "sys/dev/drm/amd/amdgpu/amdgpu_drv.c:911"
  ],
  "poc_changes": "n/a \u2014 no PoC was seeded or run; finding is proven by code inspection (grep + ring func tables)",
  "attempts": 0,
  "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": 0,
  "guest_dirty": 0,
  "build_cmd": "",
  "run_cmd": "",
  "code_hash": "",
  "notes": "Pass-2 new finding (not a re-report of DF-1710/DF-4404/DF-4447: those are the fw-header path and the UVD/VCE parsers; this is the VCN parsers complete absence). Guest check 2026-09-21: /dev/dri absent, no 1002 PCI device -> amdgpu cannot load. Also noted, not filed (below noise bar): amdgpu_vcn.c:173 double-suspend saved_bo leak (root-triggered S4 path) and amdgpu_vcn.c:127-133 fw leak on bo_create failure.",
  "recommended_fix": "Backport upstream amdgpu_vcn_cs_parse/amdgpu_vcn_dec_cs_msg (H264/HEVC message validation: session handle + fb_buffer address/size vs CS bo list) and set .parse_cs on vcn_v1_0_dec_ring_vm_funcs",
  "fix_status": "not_testable",
  "fix_baseline_reproduced": 0,
  "fix_patched_reproduced": 0,
  "fix_verdict": "Fix validation impossible: no AMD GPU on the verification guest, and the bug itself was not reproduced at runtime (status untested). fix.diff intentionally not authored (audit rule: fix.diff accompanies reproduced memory-corruption findings).",
  "fix_evidence": "VERDICT.md section Recommended fix; guest runtime check in notes"
}