DF-3975 / verdict.json
{ "finding_id": "DF-3975", "status": "inconclusive", "reproduced": 0, "impact": "none", "confidence": "likely", "verdict": "btc_dpm_get_sclk/btc_dpm_get_mclk (btc_dpm.c:2802-2822) unconditionally dereference eg_pi->requested_rps.ps_priv, which stays NULL from the eg_pi kzalloc (btc_dpm.c:2556) until the first btc_dpm_pre_set_power_state (2293); radeon_dpm_change_power_state_lockeds early returns (radeon_pm.c:1080,1105-1107) can defer that first call indefinitely on headless/single-state systems, while evergreen watermark code calls radeon_dpm_get_sclk directly from display commit (evergreen.c:2162-2197 via atombios_crtc.c:1448/1642) whenever dpm_enabled. First display event in the window \u2192 NULL-page read \u2192 panic. Structural twin of DF-3953s ps_priv window for the btc asic ops; hardware-gated (no radeon GPU in guest) so inconclusive with source-level likelihood.", "exploit_chain": "", "evidence": "VERDICT.md boot\u2192hotplug trace; the ioctl path (radeon_kms.c:567-580) uses get_current_sclk and is safe \u2014 the vulnerable consumer is the display-bandwidth path", "kernel_refs": [ "sys/dev/drm/radeon/btc_dpm.c:2802", "sys/dev/drm/radeon/btc_dpm.c:2813", "sys/dev/drm/radeon/btc_dpm.c:2266", "sys/dev/drm/radeon/btc_dpm.c:2293", "sys/dev/drm/radeon/btc_dpm.c:2485", "sys/dev/drm/radeon/btc_dpm.c:2556", "sys/dev/drm/radeon/evergreen.c:2162", "sys/dev/drm/radeon/atombios_crtc.c:1448", "sys/dev/drm/radeon/radeon_pm.c:1080", "sys/dev/drm/radeon/radeon_pm.c:1449" ], "poc_changes": "No PoC: hardware-gated (needs real Barts-class display pipeline to order the events).", "attempts": 1, "guest_uname": "DragonFly dfbsd 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": 10, "guest_dirty": 0, "build_cmd": "", "run_cmd": "", "code_hash": "", "notes": "Physical-action trigger (display hotplug) on default-enabled DPM; Medium consistent with DF-3953/DF-3754.", "recommended_fix": "Prime requested_rps from boot_ps at the end of btc_dpm_enable (btc_update_requested_ps at 2485) so get_sclk/get_mclk never observe ps_priv==NULL.", "fix_status": "not_testable", "fix_baseline_reproduced": null, "fix_patched_reproduced": null, "fix_verdict": "fix.diff authored (prime requested_rps at enable); not build-testable without the hardware.", "fix_evidence": "findings/poc/DF-3975/fix.diff" } |