{
  "finding_id": "DF-4767",
  "status": "inconclusive",
  "reproduced": 0,
  "impact": "none",
  "confidence": "certain",
  "verdict": "SOURCE-CONFIRMED, INCONCLUSIVE-RUNTIME (no AMD GPU on the audit guest - same precedent as DF-1854/DF-1855). When psp_hw_start fails after psp_ring_init/psp_tmr_init/psp_asd_init succeeded, psp_load_fws failed_mem error path (amdgpu_psp.c:398-411) frees only cmd_buf_bo/fence_buf_bo/fw_pri_bo/psp->cmd; tmr_bo (3MB VRAM, :379/:173), asd_shared_bo (16KB VRAM, :383/:229) and adev->firmware.rbuf (4KB, psp_ring_init:375 -> psp_v3_1.c:310) are leaked. psp_hw_init:441-444 then flips firmware.load_type to AMDGPU_FW_LOAD_DIRECT, so psp_hw_fini:452-453 - the only code that frees those BOs - early-returns forever: the leak is permanent and repeatable per failed probe/module-reload cycle (~3MB VRAM each). Code path is certain; runtime impact not exercisable on this guest (amdgpu never attaches).",
  "exploit_chain": "",
  "evidence": "VERDICT.md (full path:line chain); fix.diff.",
  "kernel_refs": [
    "sys/dev/drm/amd/amdgpu/amdgpu_psp.c:346",
    "sys/dev/drm/amd/amdgpu/amdgpu_psp.c:375",
    "sys/dev/drm/amd/amdgpu/amdgpu_psp.c:379",
    "sys/dev/drm/amd/amdgpu/amdgpu_psp.c:383",
    "sys/dev/drm/amd/amdgpu/amdgpu_psp.c:388",
    "sys/dev/drm/amd/amdgpu/amdgpu_psp.c:398",
    "sys/dev/drm/amd/amdgpu/amdgpu_psp.c:441",
    "sys/dev/drm/amd/amdgpu/amdgpu_psp.c:452",
    "sys/dev/drm/amd/amdgpu/amdgpu_psp.c:455",
    "sys/dev/drm/amd/amdgpu/psp_v3_1.c:310",
    "sys/dev/drm/amd/amdgpu/amdgpu_object.c:359"
  ],
  "poc_changes": "No runtime PoC possible on this guest; static-only evidence pack.",
  "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 (no AMD GPU on guest)",
  "run_cmd": "n/a",
  "code_hash": "n/a",
  "notes": "Suggested hardware verification recipe in README.md (corrupt PSP SOS fw, reload N times, watch VRAM stats).",
  "recommended_fix": "Free ring/asd_shared/tmr BOs in psp_load_fws failed_mem path (fix.diff); NULL-safe, pointers cleared.",
  "fix_status": "not_testable",
  "fix_baseline_reproduced": 0,
  "fix_patched_reproduced": 0,
  "fix_verdict": "fix.diff applies cleanly to pristine sys/dev/drm/amd/amdgpu/amdgpu_psp.c and was reviewed against amdgpu_bo_free_kernel NULL-safety and amdgpu_bo_unref pointer-clearing (no double-free for the sriov skip_memalloc path that also funnels into failed_mem); runtime validation needs AMD hardware absent from the guest.",
  "fix_evidence": "fix.diff; amdgpu_object.c:359-379 (NULL-safe free, clears cpu_addr), amdgpu_bo_unref sets *bo=NULL."
}