β¬’ DragonFlyBSD Kernel Audit
← triage Β· dashboard
DF-1937

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)

No comments yet.

PoC verification

Evidence pack

findings/poc/DF-1937 Β· 4 files
FileTypeDescriptionSize
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
VERDICT.md verdict source-confirmation analysis
↓ download 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

fixed
baseline reproduced→ patch + rebuild →patched clean

fix.diff compiled in batch kernel build rc=0 -Werror

fix.diff compiled in batch kernel build rc=0 -Werror
↓ fix.diffcombined build rc=0

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)