DF-3612 / verdict.json
{ "finding_id": "DF-3612", "status": "reproduced", "reproduced": 1, "impact": "panic", "confidence": "certain", "verdict": "Same malicious-VBIOS DoS family as DF-1137 (fan-table t_diff) but a distinct sink pair. radeon_atombios_get_asic_ss_info() copies ss->rate from the VBIOS ASIC_InternalSS_Info entry verbatim and returns true; si_calculate_sclk_params:4831 divides by (reference_divider * ss.rate) and si_populate_mclk_value:4931 divides by ss.rate whenever the SS entry matches the target clock (pi->sclk_ss/pi->mclk_ss set from the same VBIOS table). rate==0 -> div -> #DE -> kernel panic during si_dpm_enable power-state upload. Harness executes the exact expressions in forked children: SIGFPE (signal 4) on both sinks == kernel #DE panic. No AMD GPU on the audit guest for a live trigger.", "exploit_chain": "crafted VBIOS SS entry with usSpreadRateInKhz=0 + SS tables present -> sclk/mclk SS programming on every power-level conversion -> div by 0 -> #DE -> panic at DPM enable (boot-time DoS)", "evidence": "run.log [A1]/[A2]: child died from SIGFPE (signal 4): integer divide by zero at both :4831 and :4931 replicas; [B]: rate=0 -> rc=-1 (SS skipped, no trap)", "kernel_refs": [ "sys/dev/drm/radeon/si_dpm.c:4831", "sys/dev/drm/radeon/si_dpm.c:4832", "sys/dev/drm/radeon/si_dpm.c:4931", "sys/dev/drm/radeon/radeon_atombios.c:1546" ], "poc_changes": "n/a (pass-2 finding authored with its harness; no seeded PoC to fix)", "attempts": 2, "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": 90, "guest_dirty": 0, "build_cmd": "cd findings/poc/DF-3612 && sh build.sh", "run_cmd": "cd findings/poc/DF-3612 && sh run.sh", "code_hash": "e982fcd8e622970f94a7e4500cc48b47ddc47f35f805f093e090f2b7b82a95e3", "notes": "Harness-level reproduction (exact kernel expressions executed with crafted-VBIOS inputs; SIGSEGV/SIGFPE/corruption observed). No AMD SI GPU on the virtio-only QEMU guest -> no live radeon DPM path possible; radeon.ko present at /boot/kernel. Guest /usr/src restored to pristine (sha 774b9b851b3b4ccb...) after fix validation.", "recommended_fix": "see fix.diff", "fix_status": "fixed", "fix_baseline_reproduced": 1, "fix_patched_reproduced": 0, "fix_verdict": "git apply --check OK (standalone and stacked with the other four si_dpm.c fixes); targeted module TU compile `make KERNBUILDDIR=/usr/obj/usr/src/sys/X86_64_GENERIC si_dpm.o` => rc=0, -Werror clean (87080 B). Harness fixed-path shows the primitive gone (fix.diff adds `if (ss.rate == 0) return -EINVAL;` in both SS blocks. git apply --check OK; stacked module TU compile -Werror clean; harness [B] no trap with sane-rate path still rc=0.)", "fix_evidence": "fix.diff adds `if (ss.rate == 0) return -EINVAL;` in both SS blocks. git apply --check OK; stacked module TU compile -Werror clean; harness [B] no trap with sane-rate path still rc=0." } |