DF-4118 / verdict.json
{ "finding_id": "DF-4118", "status": "inconclusive", "reproduced": 0, "impact": "none", "confidence": "certain", "verdict": "Source-level certain, runtime hardware-gated. rdev->pm.dpm.boot_ps is set only under ATOM_PPLIB_CLASSIFICATION_BOOT (rv770_dpm.c:2172-2173); two crafted-VBIOS shapes reach a NULL deref through this files dispatch: (a) power table parses but no BOOT-classified state -> cypress_dpm_enable:1837-1839 cypress_force_mc_use_s0(rdev, NULL) -> rv770_get_ps(NULL) reads rps->ps_priv at NULL+offset (rv770_dpm.c:53-57) -> page fault; (b) cypress_dpm_init fails (missing PowerPlayInfo header / DF-4117 alloc failure) but radeon_pm.c:1448 discards .dpm.inits error and evergreen.c:5235 calls radeon_pm_init() as a statement, so radeon_dpm_enable executes on the kzalloc-zeroed eg_pi and, with SMC firmware present, cypress_init_smc_table(rdev, NULL) at cypress_dpm.c:1878 -> cypress_populate_smc_initial_state:1242 -> rv770_get_ps(NULL) -> page fault at boot/module-load. cypress_dpm_disable:1953 has the same latent deref. Twin of DF-4022/3972/3754; this files knowns (DF-1385/1386/1387) do not cover it.", "exploit_chain": "Crafted/missing BOOT-state VBIOS on an evergreen-family card -> kernel page-fault panic at radeon attach (DPM default-on) -> persistent boot DoS; precondition is physical/vBIOS access (option-ROM/vBIOS flash), matching the acceptance basis of the filed btc/rv770/ni twins.", "evidence": "VERDICT.md (both sub-paths with path:line); fix.diff (early boot_ps guards); env.txt (hardware absence)", "kernel_refs": [ "sys/dev/drm/radeon/cypress_dpm.c:1811", "sys/dev/drm/radeon/cypress_dpm.c:1837", "sys/dev/drm/radeon/cypress_dpm.c:1839", "sys/dev/drm/radeon/cypress_dpm.c:1878", "sys/dev/drm/radeon/cypress_dpm.c:1184", "sys/dev/drm/radeon/cypress_dpm.c:1242", "sys/dev/drm/radeon/cypress_dpm.c:1953", "sys/dev/drm/radeon/rv770_dpm.c:53", "sys/dev/drm/radeon/rv770_dpm.c:2172", "sys/dev/drm/radeon/radeon_pm.c:1448", "sys/dev/drm/radeon/evergreen.c:5235" ], "poc_changes": "No seed PoC; hardware-gated (no AMD evergreen GPU on the audit guest).", "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": 20, "guest_dirty": 0, "build_cmd": "n/a (hardware-gated)", "run_cmd": "n/a (hardware-gated)", "code_hash": "", "notes": "Cypress-dispatch twin of DF-4022 (rv770) / DF-3972 (btc) / DF-3754 (ni). Sub-path (b) shares the double error-swallow with DF-4117.", "recommended_fix": "Reject enable/disable when rdev->pm.dpm.boot_ps == NULL (fix.diff guards in cypress_dpm_enable/cypress_dpm_disable); long-term: honor dpm.init failure in radeon_pm.c.", "fix_status": "not_testable", "fix_baseline_reproduced": 0, "fix_patched_reproduced": 0, "fix_verdict": "Diff authored but kernel-level validation requires evergreen hardware absent from the audit guest.", "fix_evidence": "fix.diff; VERDICT.md" } |