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

cpu_mwait_cx_hint() NULL-pointer dereference when deep-sleep inhibition is active on a MONITOR-without-MWAIT-EXT CPU (latent kernel panic)

Summary

The inhibit fast-path derefs cpu_mwait_hints[0] without the CPU_MWAIT_HAS_CX guard while the idle loop only requires CPU_MI_MONITOR: on CPUs with CPUID.1 ECX MON but without CPUID.5 EXT/C1 sub-states the array is never allocated (cpu_mwait_attach returns early) - any cpu_inhibit_deep_sleep(1) (i915 pm_qos shim path) makes every CPU's idle loop read address 0. cpu_smp_stopped guards the same pointer; cx_hint forgot. Driver-mediated trigger, hang/panic ceiling; not constructible on the standard guest. Mirror-the-guard fix.

Discussion (0)

No comments yet.

PoC verification

Evidence pack

findings/poc/DF-5283 Β· 1 files
FileTypeDescriptionSize
verdict.json file 947 B view raw

Fix verification

not_testable
baseline no→ patch + rebuild →patched clean
per-fix-DF-5283

Confirmed kernel references

Detail

Evidence (decisive lines)

static guard-mismatch trace (machdep.c:1133 vs 578/636 vs 1446)

Verified recommended fix

add cpu_mwait_hints != NULL to the fast-path condition

Verdict

untested (needs i915 + MON-without-MWAIT-EXT CPUID; latent)