⬢ DragonFlyBSD Kernel Audit
DF-4854 / verdict.json
← back to finding ↓ download raw
{
  "finding_id": "DF-4854",
  "status": "untested",
  "reproduced": 0,
  "impact": "dos",
  "confidence": "certain",
  "verdict": "Not runnable on the audit guest (no AMD GPU; the wptr comes from device DMA into the writeback shadow word). Code-certain by inspection: vega10_ih_get_wptr (vega10_ih.c:194-220) returns the device-DMAd wptr with only a ptr_mask and never validates 32-byte entry alignment, and amdgpu_ih_process (amdgpu_ih.c:154-157) walks with rptr stepping strictly 32 bytes. A misaligned wptr can never equal rptr: the amdgpu interrupt thread laps the 256 KiB ring forever with ih->lock held (amdgpu_ih.c:144) - all GPU interrupt delivery dead (DF-4843 twin with a 32-byte grid). Aggravator unique to this file: the RB_OVERFLOW recovery path (vega10_ih.c:210-213) keeps the wptrs 4-granular phase, so wptr=0x3FFDC|1 yields rptr=0x3FFFC and the first decode_iv (vega10_ih.c:327-334) reads ring words 0xFFFF..0x10006 - words 0x10002..0x10006 are 20 bytes past the ring_size+8 dma_alloc_coherent allocation (amdgpu_ih.c:61-68) - a hostile-GPU OOB read whose contents are decoded as an IV and also handed to amdgpu_amdkfd_interrupt (amdgpu_irq.c:170). Dispatch indices themselves are bounds-checked (amdgpu_irq.c:409-417). Hostile/faulting-device DoS + bounded OOB read; no uid0 route.",
  "exploit_chain": "",
  "evidence": "README.md (exact register arithmetic with path:line); VERDICT.md (proof + kill list); trigger_sketch.c (hostile-device write pattern)",
  "kernel_refs": [
    "sys/dev/drm/amd/amdgpu/vega10_ih.c:194",
    "sys/dev/drm/amd/amdgpu/vega10_ih.c:210",
    "sys/dev/drm/amd/amdgpu/vega10_ih.c:219",
    "sys/dev/drm/amd/amdgpu/vega10_ih.c:308",
    "sys/dev/drm/amd/amdgpu/vega10_ih.c:327",
    "sys/dev/drm/amd/amdgpu/vega10_ih.c:352",
    "sys/dev/drm/amd/amdgpu/vega10_ih.c:389",
    "sys/dev/drm/amd/amdgpu/amdgpu_ih.c:61",
    "sys/dev/drm/amd/amdgpu/amdgpu_ih.c:154",
    "sys/dev/drm/amd/amdgpu/amdgpu_irq.c:170",
    "sys/dev/drm/amd/include/asic_reg/oss/osssys_4_0_sh_mask.h:229"
  ],
  "poc_changes": "sketch only; no runnable PoC without a Vega10 GPU (hostile-device DMA source)",
  "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": "DF-4843 (tonga_ih) twin, 32-byte entries vs 16. fix.diff intentionally omitted per policy for untested findings, same as DF-4843. Rest of file clean; see neg-evidence-panasonic-vega10-pass2/NOTES.md.",
  "recommended_fix": "in vega10_ih_get_wptr, after masking, round a misaligned wptr down to the 32-byte entry boundary with a warn (and align the overflow-recovery rptr identically); cap per-invocation entries in amdgpu_ih_process so a bad wptr cannot hard-spin the interrupt thread",
  "fix_status": "not_testable",
  "fix_baseline_reproduced": 0,
  "fix_patched_reproduced": 0,
  "fix_verdict": "fix validation not possible: finding is device-gated (no Vega10 GPU on the audit guest); recommended fix is static-only, mirroring DF-4843",
  "fix_evidence": "VERDICT.md Fix section; no fix_run.log/fix_build.log (no baseline repro possible)"
}