DF-4916 / verdict.json
{ "finding_id": "DF-4916", "status": "not_reproduced", "reproduced": 0, "impact": "none", "confidence": "certain", "verdict": "amdgpu_virt_init_data_exchange (amdgpu_virt.c:392-443) never validates that the kmaped fw VRAM reservation (fw_vram_usage.size taken verbatim from the host-supplied vBIOS, amdgpu_atombios.c:1803-1807 / amdgpu_atomfirmware.c:91-95; only gate is size>0 at amdgpu_ttm.c:1707) actually contains the fixed 64KB AMDGIM_DATAEXCHANGE_OFFSET exchange area. It dereferences va+64KB immediately (amdgpu_virt.c:402-408) and, on a host-forgeable checksum (key is host-supplied via mailbox 2, mxgpu_ai.c:176-180), memsets 1024 bytes at va+64KB+pf2vf_size with pf2vf_size host-controlled in (0,4096) (amdgpu_virt.c:411-420) - an OOB write of up to ~69KB offset into a region that may be as small as 1KB, plus OOB header reads. Guest panic or VRAM corruption at driver init / after VF FLR. Not reproduced on the audit guest (no AMD PCI device; fw_vram_usage.va stays NULL and the function returns at line 402). Bounds defect certain from source; inherited unchanged from upstream Linux v4.19.", "exploit_chain": "", "evidence": "VERDICT.md (full bound math with path:line); trigger.md (host-side vBIOS/GIM setup); env.txt (guest pciconf: zero AMD devices)", "kernel_refs": [ "sys/dev/drm/amd/amdgpu/amdgpu_virt.c:402", "sys/dev/drm/amd/amdgpu/amdgpu_virt.c:405", "sys/dev/drm/amd/amdgpu/amdgpu_virt.c:411", "sys/dev/drm/amd/amdgpu/amdgpu_virt.c:416", "sys/dev/drm/amd/amdgpu/amdgpu_virt.c:419", "sys/dev/drm/amd/amdgpu/amdgpu_virt.h:74", "sys/dev/drm/amd/amdgpu/amdgpu_virt.h:209", "sys/dev/drm/amd/amdgpu/amdgpu_atombios.c:1805", "sys/dev/drm/amd/amdgpu/amdgpu_atomfirmware.c:93", "sys/dev/drm/amd/amdgpu/amdgpu_ttm.c:1707", "sys/dev/drm/amd/amdgpu/amdgpu_device.c:1695", "sys/dev/drm/amd/amdgpu/amdgpu_device.c:3345" ], "poc_changes": "No runnable PoC for this guest; pack carries the host-side trigger procedure (malicious/mismatched vBIOS reservation + forged pf2vf checksum) and source-level proof.", "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": 40, "guest_dirty": 0, "build_cmd": "n/a (SR-IOV VF AMD GPU guest required)", "run_cmd": "n/a (see trigger.md)", "code_hash": "a78aff5005f5c9434501e058bc26321e81f5d9c07791cc76d4b06fb6773ddea2", "notes": "Hardware-gated: no AMD GPU on audit guest, path unreachable (fw_vram_usage.va == NULL). Trigger data is host/PF-supplied (vBIOS table + VRAM contents + checksum key via mailbox); guest userspace cannot reach it. Consistent with the audits host-fed-mailbox precedent (DF-4755/4756): Low. Inherited from upstream v4.19 verbatim.", "recommended_fix": "Gate the whole exchange on fw_vram_usage.size >= AMDGIM_DATAEXCHANGE_OFFSET + sizeof(amdgim_vf2pf_info) and validate pf2vf_size >= sizeof(struct amdgim_pf2vf_info_v2) and pf2vf_size + sizeof(amdgim_vf2pf_info) <= size - AMDGIM_DATAEXCHANGE_OFFSET before use (see VERDICT.md diff).", "fix_status": "not_testable", "fix_baseline_reproduced": 0, "fix_patched_reproduced": 0, "fix_verdict": "Fix could not be validated: no SR-IOV AMD hardware in the audit guest, so neither baseline nor patched behavior is reachable.", "fix_evidence": "VERDICT.md Recommended fix section contains the git-apply-able diff against amdgpu_virt.c." } |