DF-5181 / verdict.json
{ "finding_id": "DF-5181", "status": "untested", "reproduced": false, "impact": "none", "confidence": "certain", "verdict": "smu9_send_msg_to_smc (smu9_smumgr.c:101-117) and smu9_send_msg_to_smc_with_parameter (:128-147) detect SMC failure (ret != 1 from the bounded smu9_wait_for_response) but unconditionally return 0 at :116/:146, so every in-tree caller guard is vacuous (vega10_smumgr.c:147-150 PP_ASSERT_WITH_CODE(!send) can never fire; vega12_smumgr.c:52-57 tests ==0 as success) and smu9_get_argument() (:150-155) serves stale C2PMSG_82 content into version/feature/table logic (vega10_smumgr.c:151,160 / :107-108->:113-123 / :47-58). No memory-unsafe sink: table memcpy sizes are driver-fixed (vega10_smumgr.c:45-46,57-58); waits are bounded (smu_helper.c:161-172, usec_timeout=200ms hwmgr.c:85). Phase V skipped per contract (Low, hardware-fault-gated, vendored parity with upstream Linux which carries the identical defect).", "exploit_chain": "", "evidence": "findings/poc/DF-5181/VERDICT.md (caller-side vacuous-guard proof with pp_debug.h:37-43 polarity); README.md; fix.diff. Decisive lines: smu9_smumgr.c:113-116 and :143-146 (log-then-return-0), vega10_smumgr.c:147-151, vega12_smumgr.c:52-57.", "kernel_refs": [ "sys/dev/drm/amd/powerplay/smumgr/smu9_smumgr.c:112", "sys/dev/drm/amd/powerplay/smumgr/smu9_smumgr.c:116", "sys/dev/drm/amd/powerplay/smumgr/smu9_smumgr.c:142", "sys/dev/drm/amd/powerplay/smumgr/smu9_smumgr.c:146", "sys/dev/drm/amd/powerplay/smumgr/smu9_smumgr.c:150", "sys/dev/drm/amd/powerplay/smumgr/vega10_smumgr.c:47", "sys/dev/drm/amd/powerplay/smumgr/vega10_smumgr.c:107", "sys/dev/drm/amd/powerplay/smumgr/vega10_smumgr.c:147", "sys/dev/drm/amd/powerplay/smumgr/vega12_smumgr.c:52", "sys/dev/drm/amd/powerplay/hwmgr/smu_helper.c:161", "sys/dev/drm/amd/powerplay/hwmgr/hwmgr.c:85" ], "poc_changes": "No PoC authored: finding is a source-semantics defect (unconditional return 0) fully demonstrated by citation; guest lacks AMD Vega silicon so no runtime PoC is possible.", "attempts": 0, "guest_uname": "", "runtime_sec": 0, "guest_dirty": 0, "build_cmd": "", "run_cmd": "", "code_hash": "", "notes": "Phase V skipped per reviewer contract (Low severity / hardening-class, hardware-gated trigger). QEMU guest has no Vega10/12 dGPU, so amdgpu smu9 powerplay cannot instantiate; status recorded honestly as untested rather than not_reproduced (no run attempted). Upstream-parity defect: file is a verbatim port of Linux smu9_smumgr.c; upstream is the fix owner, DF can carry the two-line fix independently. Pass-2 context: last smumgr file; DF-4774 (smu7 fw-upload OOB) and DF-5056 (smu10 dangling smu_backend) are different files/classes and do not apply to smu9.", "recommended_fix": "Propagate SMC failure: return (ret == 1) ? 0 : -EIO; in both smu9_send_msg_to_smc and smu9_send_msg_to_smc_with_parameter (caller-compatible; vega10/vega12 guards already expect 0 == success).", "fix_status": "not_testable", "fix_baseline_reproduced": 0, "fix_patched_reproduced": 0, "fix_verdict": "fix.diff authored (two return-value changes + comments) against the read-only sys/ tree. Baseline/patched runtime comparison impossible on the audit guest (no Vega silicon); caller compatibility verified by inspection: all in-tree call sites treat 0 as success (vega10_smumgr.c:147, vega12_smumgr.c:52-57, function tables vega10_smumgr.c:353-354 / vega12_smumgr.c:372-373).", "fix_evidence": "findings/poc/DF-5181/fix.diff (git-apply-able unified diff, generated via diff -u from the pristine file; hunk headers @@ -113,7 and @@ -143,7 match the audited tree)." } |