DF-4428 / verdict.json
{ "finding_id": "DF-4428", "status": "untested", "reproduced": 0, "impact": "none", "confidence": "certain", "verdict": "Deterministic kernel heap leak in smu10_hwmgr_backend_fini: smu10_populate_clock_table allocates seven dependency tables including vdd_dep_on_mclk (smu10_hwmgr.c:443-445, kzalloc(4+12*NUM_MEMCLK_DPM_LEVELS)) but backend_fini (:523-548) kfrees only six - the vdd_dep_on_mclk free is missing, so every hwmgr_hw_fini (hwmgr.c:258-259) on a Raven APU with a valid SMC clock table leaks ~52 bytes + bucket overhead permanently. Whole-tree rg confirms exactly three vdd_dep_on_mclk occurrences in the file: alloc at :443 and readers at :990/:1043, no free. Not runtime-testable here: the audit guest has no AMD GPU (pciconf 0x1002 count=0, no drm/amd klds - env.txt), so the amdgpu/powerplay backend cannot be instantiated; the finding is certain by inspection and compile-time deterministic.", "exploit_chain": "", "evidence": "VERDICT.md allocation/free asymmetry walk; smu10_hwmgr.c:443 (alloc) vs :528-539 (six frees, mclk absent); env.txt guest hardware absence; fix.diff dry-run-verified two-line free", "kernel_refs": [ "sys/dev/drm/amd/powerplay/hwmgr/smu10_hwmgr.c:399", "sys/dev/drm/amd/powerplay/hwmgr/smu10_hwmgr.c:433", "sys/dev/drm/amd/powerplay/hwmgr/smu10_hwmgr.c:443", "sys/dev/drm/amd/powerplay/hwmgr/smu10_hwmgr.c:493", "sys/dev/drm/amd/powerplay/hwmgr/smu10_hwmgr.c:523", "sys/dev/drm/amd/powerplay/hwmgr/smu10_hwmgr.c:528", "sys/dev/drm/amd/powerplay/hwmgr/hwmgr.c:258", "sys/dev/drm/amd/powerplay/hwmgr/smu10_hwmgr.h:193" ], "poc_changes": "New pass-2 finding; no runtime PoC exists or is possible without Raven APU hardware. Evidence is code-citation based.", "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", "run_cmd": "n/a (requires Raven APU; guest pciconf shows zero AMD devices)", "code_hash": "", "notes": "Low severity resource leak (CWE-401). Secondary observation folded into VERDICT.md: backend_init ignores populate_clock_table failure (:493), leaving NULL tables that :990/:1043 readers would deref - firmware-fault class only. The :851 force_clock_level lead from the sibling audit was re-investigated and KILLED: its only consumers are amdgpu_pm.c sysfs handlers inside #if 0 blocks (lines 118-1720 and 2002-2092) and debugfs (CONFIG_DEBUG_FS undefined in sys/dev/drm/kconfig.h); no ioctl path reaches force_clock_level; and count==0 is impossible anyway (populate sets count to compile-time constants 3/4/8 or leaves the pointer NULL).", "recommended_fix": "Add kfree(pinfo->vdd_dep_on_mclk); pinfo->vdd_dep_on_mclk = NULL; to smu10_hwmgr_backend_fini next to the six sibling frees (fix.diff).", "fix_status": "not_testable", "fix_baseline_reproduced": 0, "fix_patched_reproduced": 0, "fix_verdict": "No Raven hardware available to build/observe; fix is a two-line symmetric free identical in shape to the six adjacent frees, patch -p1 dry-run verified.", "fix_evidence": "fix.diff" } |