DF-3742 / verdict.json
{ "finding_id": "DF-3742", "status": "inconclusive", "reproduced": 0, "impact": "none", "confidence": "certain", "verdict": "Parse-side root of the reference-clock divide-by-zero family. radeon_atom_get_clock_info() stores FirmwareInfo usReferenceClock / usCoreReferenceClock / usMemoryReferenceClock into p1pll/spll/mpll reference_freq with no zero/sanity default \u2014 while pll_out_min==0 IS defaulted (:1173-1178, :1202-1207, :1229-1234). A zero reference clock then divides by zero in: (a) default modesetting: radeon_compute_pll_avivo() radeon_display.c:1027 (den=reference_freq) -> avivo_get_fb_ref_div() :1040 DIV_ROUND_CLOSEST(...,den) \u2014 any mode set; atombios_crtc.c:1128-1132 (SS step size); (b) DPM: si_calculate_sclk_params / si_populate_mclk_value (sink filings DF-3613), ci_calculate_mclk_params (DF-3622/DF-3648). This file owns the parse-side fix (default when 0), which kills the whole sink family. Harness on guest: verbatim parse store + :1040 sink -> SIGFPE (exit 42). Kernel path unreachable on this guest (no AMD GPU).", "exploit_chain": "crafted/blank FirmwareInfo with usReferenceClock=0 -> radeon_atom_get_clock_info stores 0 -> first mode set (or DPM enable) divides by zero -> #DE kernel panic", "evidence": "harness_refclock.c + build.log + run.log; VERDICT.md; kernel refs sys/dev/drm/radeon/radeon_atombios.c:1146-1147", "kernel_refs": [ "sys/dev/drm/radeon/radeon_atombios.c:1146-1147", "sys/dev/drm/radeon/radeon_atombios.c:1173-1178", "sys/dev/drm/radeon/radeon_atombios.c:1188-1193", "sys/dev/drm/radeon/radeon_atombios.c:1215-1220", "sys/dev/drm/radeon/radeon_display.c:1027", "sys/dev/drm/radeon/radeon_display.c:1040", "sys/dev/drm/radeon/atombios_crtc.c:1128-1132" ], "poc_changes": "harness written from scratch (no seed PoC): verbatim kernel arithmetic replica with canary-guarded destination model, built and executed on the DragonFly guest (cc 8.3); fixed nested-comment, stddef/stdint includes and volatile divisors during bring-up", "attempts": 3, "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": 6, "guest_dirty": 0, "build_cmd": "./build.sh", "run_cmd": "./run.sh (after ./build.sh)", "code_hash": "8c4313faa5c3752ee4dc9b30d7532ae63821d5700eba35ff0e02953f65f964a3", "notes": "Guest has NO AMD/radeon GPU (virtio-only); /boot/kernel/radeon.ko exists (code shipped in the default install) but cannot attach, so the kernel code path is unreachable at runtime on this guest. Evidence is source-level certainty (path:line traced) plus a verbatim-arithmetic userland harness compiled and executed on the guest (build.log/run.log).", "recommended_fix": "default reference clocks to 10000 (100 MHz) when the VBIOS reports 0", "fix_status": "not_tested", "fix_baseline_reproduced": 0, "fix_patched_reproduced": 0, "fix_verdict": "fix.diff authored after source-level verification; cannot be validated on this guest (no AMD GPU; radeon.ko cannot attach). Compiling the module or booting a patched kernel would not exercise the path without hardware.", "fix_evidence": "fix.diff (unified, against read-only sys/ tree; never applied)" } |