Divide-by-zero in spread-spectrum clock math when ATOM BIOS supplies ss.rate==0
Summary
rv730_populate_sclk_value L97-98 and rv730_populate_mclk_value L173-174 compute clk_s=reference_clock*5/(reference_divider*ss.rate) then clk_v=ss.percentage*fbdiv/(clk_s*10000) with no guard against ss.rate==0 or clk_s==0. ss.rate from GPU ATOM BIOS SS table via radeon_atombios_get_asic_ss_info: v1 usSpreadRateInKhz directly radeon_atombios.c:1546; v2/v3 usSpreadRateIn10Hz /=100 at L1569/L1594 -> if usSpreadRateIn10Hz<100 rate becomes 0 after integer divide. Divide-by-zero kernel panic on DPM-enable path radeon_dpm_enable->rv770_convert_power_level_to_smc->rv730_populate_sclk/mclk_value. DPM enabled by default radeon.dpm=1. Attacker: malicious/corrupt VBIOS Thunderbolt/PCIe/VFIO passthrough. Impact: hard kernel panic A:H no C/I. Same pattern in rv770_dpm.c:548 rv740_dpm.c:165 cypress_dpm.c:565 ni_dpm.c:2044 si_dpm.c:4831. Fix: if(ss.rate==0||clk_s==0)goto skip SS.
Discussion (0)
PoC verification
Evidence pack
findings/poc/DF-1937 Β· 4 files| File | Type | Description | Size | |
|---|---|---|---|---|
| fix.diff | suggested-fix | git-apply-able fix for the cited bug | 1.2 KB | view raw |
| VERDICT.md | verdict | source-confirmation analysis | 709 B | β raw |
| build.sh | build-script | N/A (source-only) | 61 B | view raw |
| run.sh | run-script | N/A (source-only) | 87 B | view raw |
DF-1937 VERDICT
Verdict: REPRODUCED (source-confirmed)
Impact: Low (driver-level NULL deref / OOB / leak / DoS β hardware-gated)
Mechanism: rv730_populate_sclk_value L97-98 and rv730_populate_mclk_value L173-174 compute clk_s=reference_clock5/(reference_dividerss.rate) then clk_v=ss.percentagefbdiv/(clk_s10000) with no guard against s
Citation: sys/dev/drm/radeon/rv730_dpm.c:97-174
Fix: Applied fix.diff β compiles in batch kernel build (rc=0, -Werror).
Verification method: Source-only line-by-line trace of cited path:line. Low-severity driver bug; PoC trigger requires specific hardware or root context. Confirmed the cited vulnerable pattern exists in source.
Fix verification
fixedfix.diff compiled in batch kernel build rc=0 -Werror
fix.diff compiled in batch kernel build rc=0 -Werror
Confirmed kernel references
β
Detail
Exploit chain
none (Low severity)
Evidence (decisive lines)
Source-confirmed: div-by-zero when ss.rate=0 or clk_s=0 in spread-spectrum math (rv730_dpm.c:97-174)
Verified recommended fix
Source-confirmed: div-by-zero when ss.rate=0 or clk_s=0 in spread-spectrum math (rv730_dpm.c:97-174)
Verdict
Source-confirmed: div-by-zero when ss.rate=0 or clk_s=0 in spread-spectrum math (rv730_dpm.c:97-174)
No comments yet.