DF-4588 / verdict.json
{ "finding_id": "DF-4588", "status": "untested", "reproduced": 0, "impact": "none", "confidence": "likely", "verdict": "Upstream-divergence defect, certain in code, runtime hardware-gated: ttm_bo_vm_fault_dfly (ttm_bo_vm.c:499-725) lacks the upstream TTM_PAGE_FLAG_SG refusal (dead in #if 0 at ttm_bo_vm.c:161-168), so prime-imported BOs (TTM_PAGE_FLAG_SG set by amdgpu_ttm.c:1272-1280 / radeon_ttm.c:747; prime ioctls live at drm_ioctl.c:651-652) fault the exporters pages through the card node and pmap_page_set_memattr mutates the cache attribute of pages TTM does not own (ttm_bo_vm.c:669,695-697). No kernel memory corruption by itself; cross-driver page-attribute/coherency impact. Not runnable on the audit guest (no DRM device); no runtime attempt made \u2014 PoC is a documentation stub plus the one-line port fix in README.md.", "exploit_chain": "on amdgpu/radeon hardware: GEM_CREATE -> PRIME_HANDLE_TO_FD -> PRIME_FD_TO_HANDLE (self-import creates SG ttm_tt) -> GEM_MMAP ioctl -> mmap(card node, fake offset) -> touch -> foreign SG pages mapped with TTM-chosen attributes", "evidence": "README.md (code cites + ported upstream check); df4588.c (flow documentation)", "kernel_refs": [ "sys/dev/drm/ttm/ttm_bo_vm.c:161", "sys/dev/drm/ttm/ttm_bo_vm.c:584", "sys/dev/drm/ttm/ttm_bo_vm.c:690", "sys/dev/drm/ttm/ttm_bo_vm.c:695", "sys/dev/drm/amd/amdgpu/amdgpu_ttm.c:1280" ], "poc_changes": "no seed; documentation stub (full trigger requires amdgpu UAPI + hardware)", "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": "n/a (documentation stub)", "run_cmd": "n/a (requires radeon/amdgpu hardware)", "code_hash": "skip", "notes": "Low severity; PoC skipped per Phase V rules (runtime needs TTM-capable GPU; guest has none). Fix is a 8-line port of the upstream check into the live fault, shown in README.md.", "recommended_fix": "Port the upstream TTM_PAGE_FLAG_SG refusal from the #if 0 body into ttm_bo_vm_fault_dfly (return VM_PAGER_ERROR before fault_reserve_notify)", "fix_status": "not_testable", "fix_baseline_reproduced": 0, "fix_patched_reproduced": 0, "fix_verdict": "one-line port of the upstream check (README.md); not compile-validated separately \u2014 trivially contained in the same fault function rebuilt for DF-4587s fix (ttm_bo_vm.c compiles -Werror clean in drm.ko)", "fix_evidence": "README.md diff hunk" } |