DF-4566 / verdict.json
{ "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" } |