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

intel_guc_ads_create() indexes GUC_MAX_ENGINES_NUM-sized ADS arrays with sparse engine->guc_id (hw_id) values β€” out-of-bounds array writes on ICL (VCS3_HW=6) that stay contained inside the packed blob but corrupt GuC-visible ADS fields

Summary

guc_id comes from the sparse hw_id table (VCS3_HW=6, VECS2_HW=12) but the arrays are sized 5 - on ICL (has_guc=1 inherited) the BSD3 iteration writes white_list[6]/eng_state_size[6] past the arrays into reg_state_buffer/reserved padding (in-blob, first page). No kernel-memory corruption or leak (blob never read back); wrong GuC data only. Requires ICL + root params. Assert/skip guard fix.

Discussion (0)

No comments yet.

PoC verification

Evidence pack

findings/poc/DF-5185 Β· 1 files
FileTypeDescriptionSize
verdict.json file 1.1 KB view raw

Fix verification

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

Confirmed kernel references

Detail

Evidence (decisive lines)

static proof: sparse hw_id table (i915_reg.h:190-197) vs GUC_MAX_ENGINES_NUM=5 arrays (intel_guc_fwif.h:40)

Verified recommended fix

GEM_BUG_ON(engine->guc_id >= GUC_MAX_ENGINES_NUM) before array writes

Verdict

untested (requires ICL GPU + root i915.alpha_support + guc_firmware_path; no guest hw)